eclipse 带有休眠错误的 JPA:[PersistenceUnit: JPA] 无法构建 EntityManagerFactory

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16922314/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-10 21:44:03  来源:igfitidea点击:

JPA With Hibernate Error: [PersistenceUnit: JPA] Unable to build EntityManagerFactory

eclipsehibernatejpa-2.0entitymanager

提问by Davidin073

I have a problem with Java Persistence API and Hibernate. My situation of project is:

我有 Java Persistence API 和 Hibernate 的问题。我的项目情况是:

enter image description here

在此处输入图片说明

My persistence.xml file is:

我的 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>

And i create EntityManagerFactory in:

我在以下位置创建 EntityManagerFactory:

private static EntityManagerFactory buildEntityManagerFactory() 
    {
        try 
        {
            return Persistence.createEntityManagerFactory("JPA");
        } 
        catch (Throwable ex) 
        {
                    ex.printStackTrace();
            //throw new RuntimeException("Error al crear la factoria de JPA:->"+ ex.getMessage());
        }
    }

My error is about create EntityManagerFactory:

我的错误是关于创建 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

Part of Libro and Categoria classes code is:

Libro 和 Categoria 类代码的一部分是:

@Entity
@Table(name = "Categorias")
public class Categoria implements Serializable
{
    private static final long serialVersionUID = 1L;

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

....

and

@Entity
@Table(name="Libros")
public class Libro implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    private String isbn;
    private String titulo;
    @ManyToOne
    @JoinColumn (name="categoria")
    private Categoria categoria;

....

My file of Hibernate Configuration is:

我的休眠配置文件是:

<?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>

Any ideas!! Thank′s!!

有任何想法吗!!谢谢!!

回答by Balázs Németh

You don't need both hibernate.cfg.xmland persistence.xmlin this case. Have you tried removing hibernate.cfg.xmland mapping everything in persistence.xmlonly?

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

But as the other answer also pointed out, this is not okay like this:

但正如另一个答案所指出的,这不是这样的:

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

Didn't you want to use @Columninstead?

你不是想用@Column吗?

回答by eternay

Suppress the @JoinColumn(name="categoria")on the ID field of the Categoriaclass and I think it will work.

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

回答by Bharath Valse

It worked for me after adding the following dependency in pom,

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

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

回答by Vinit Bhardwaj

Use above annotation if someone is facing :--org.hibernate.jpa.HibernatePersistenceProvider persistence provider when it attempted to create the container entity manager factory for the paymentenginePU persistence unit. The following error occurred: [PersistenceUnit: paymentenginePU] Unable to build Hibernate SessionFactory ** This is a solution if you are using Audit table.@Audit

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

Use:- @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) on superclass.

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