我是JPA和Hibernate的新手。阅读一些在线资料后,我现在了解了什么是Hibernate以及如何将其与JPA一起使用。
现在,我正在尝试运行此JPA&Hibernate教程。我已经完成了他们在本教程中提到的所有内容。
我没有Oracle DB,只有MySQL。因此,我对persistence.xml使用JPA和Hibernate的理解进行了一些更改(我不知道它是否正确……在我看来是正确的。)
persistence.xml
这是我的 persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>Customer</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="1234"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/> <property name="hibernate.max_fetch_depth" value="3"/> </properties> </persistence-unit> </persistence>
但是我似乎没有得到他们描述的输出。它给了我:
Customer id before creation:null log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named customerManager at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at CustomerDAO.create(CustomerDAO.java:8) at CustomerDAO.main(CustomerDAO.java:22)
任何建议将不胜感激。
更新:
我已完成要求进行的更改。但是,仍然出现asme错误行!!!
他们没有在该教程中提及有关 orm.xml的 任何内容。可能是问题的根源!!!
您persistence.xml的用户名无效,EntityManagerFactory因此无法创建。它应该是:
EntityManagerFactory
(请注意<property>元素是如何关闭的,不应嵌套)
<property>
更新: 我遍历了本教程,Id使用MySQL时,您还必须更改生成策略(因为MySQL不支持序列)。我建议使用该AUTO策略(MySQL默认为IDENTITY)。为此,请删除SequenceGenerator注释并按如下所示更改代码:
Id
AUTO
SequenceGenerator
@Entity @Table(name="TAB_CUSTOMER") public class Customer implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="CUSTOMER_ID", precision=0) private Long customerId = null; ... }
这应该有所帮助。
PS:您还应该提供一个log4j.properties建议。
log4j.properties