Eclipse JPA出现Hibernate错误:[PersistenceUnit:JPA]无法构建EntityManagerFactory

Eclipse JPA出现Hibernate错误:[PersistenceUnit:JPA]无法构建EntityManagerFactory,eclipse,hibernate,jpa-2.0,entitymanager,Eclipse,Hibernate,Jpa 2.0,Entitymanager,我对Java持久性API和Hibernate有问题。 我的项目情况如下: 我的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

我对Java持久性API和Hibernate有问题。 我的项目情况如下:

我的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_2_0.xsd"
    version="2.0">
    <persistence-unit name="JPA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.david.Libro</class>
        <class>com.david.Categoria</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="javax.persistence.transactionType" value="RESOURCE_LOCAL" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/arquitecturaJava" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>
</persistence>
我的错误是关于创建EntityManagerFactory的:

    javax.persistence.PersistenceException: [PersistenceUnit: JPA] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:924)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:59)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at com.david.JPAHelper.buildEntityManagerFactory(JPAHelper.java:14)
    at com.david.JPAHelper.<clinit>(JPAHelper.java:8)
    at com.david.Categoria.buscarTodos(Categoria.java:93)
    at com.david.FormularioInsertarLibroAccion.ejecutar(FormularioInsertarLibroAccion.java:25)
    at com.david.ControladorLibros.doGet(ControladorLibros.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.david.Libro
    at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2638)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:706)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3512)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3466)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1756)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
    ... 27 more

我的Hibernate配置文件是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/arquitecturajava</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">5</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="show_sql">true</property>
        
        <mapping class="com.david.Categoria"></mapping>
        <mapping class="com.david.Libro"></mapping>
        
    </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost/arquitecturajava
根
根
5.
org.hibernate.dialogue.mysql5dialogue
真的
任何想法!!
谢谢

categoria
类的ID字段上抑制
@JoinColumn(name=“categoria”)
,我认为它会起作用。

在这种情况下,您不需要同时使用
hibernate.cfg.xml
persistence.xml
。您是否尝试过删除
hibernate.cfg.xml
并仅映射
persistence.xml
中的所有内容

但正如另一个答案也指出的那样,这样做是不好的:

@Id
@JoinColumn(name = "categoria") 
private String id;

你不想改用
@Column
吗?

在pom中添加了以下依赖项后,它对我很有效

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>4.3.0.Final</version>
</dependency>

org.hibernate
休眠验证器
4.3.0.1最终版本

如果有人在尝试为paymentenginePU持久化单元创建容器实体管理器工厂时遇到--org.hibernate.jpa.HibernatePersistenceProvider持久化提供程序,请使用上面的注释。发生以下错误:[PersistenceUnit:paymentenginePU]无法生成Hibernate SessionFactory **如果您使用审计表,这是一个解决方案。@Audit


在超类上使用:-@Audited(targetAuditMode=RelationTargetAuditMode.NOT_Audited)。

当重新引发异常时,如果将原始异常作为嵌套异常包含,则更有用,因此可以检查原始堆栈跟踪:
new RuntimeException(“my message”,ex)
在引发新的RuntimeException之前,使用
ex.printStackTrace()打印stacktrace
,或者使用@SJuan76评论的(更好)策略。您不应该捕获任何内容。如果创建
EntityManagerFactory
失败,您将无法恢复。我已修改了PrintOfTrace的错误显示。但是是一样的,我不知道如何解决这个错误。你的错误是:
DuplicateMapppingException:Duplicate class/entity mapping com.david.Libro
,如stacktrace中由引起的行所示。是一样的,Categoria或Libro中没有这一行的o,错误是相同的。删除hibernate.cfg.xml并删除@JoinColumn注释od Categoria后,错误是“org.hibernate.DuplicateMappingException:Duplicate class/entity mapping com.david.Libro”……我不知道为什么……如果不添加@Column,hibernate会将您的所有属性捕获为列。如果我删除hibernate.cfg.xml,我将无法访问我的BD.“/hibernate.cfg.xml未找到”,另一方面,如果我不删除persistence.xml中的hibernate.cfg.xml和注释类链接,错误是“事务未激活”,也可以查看这篇文章:您不需要两者都删除。您应该使用persistence.xml。但可能它的配置不正确!但问题是因为我告诉你的,我猜:)好吧,Hibernate的一部分是真的。必须删除hibernate.cfg.xml。但是我的错误:“javax.persistence.PersistenceException:[PersistenceUnit:JPA]无法构建EntityManagerFactory”和“复制类/实体映射com.david.Libro”无法解决…最终找到!!superss hibernate.cfg.xml和hbm文件,但不删除@JoinColumn注释。谢谢!!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/arquitecturajava</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">5</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="show_sql">true</property>
        
        <mapping class="com.david.Categoria"></mapping>
        <mapping class="com.david.Libro"></mapping>
        
    </session-factory>
</hibernate-configuration>
@Id
@JoinColumn(name = "categoria") 
private String id;
<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>4.3.0.Final</version>
</dependency>