2013-06-04 27 views
11

Tôi gặp sự cố với Java Persistence API và Hibernate. tình hình của tôi về dự án là:JPA Với lỗi Hibernate: [PersistenceUnit: JPA] Không thể xây dựng EntityManagerFactory

enter image description here

tập tin persistence.xml của tôi là:

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

Và tôi tạo EntityManagerFactory trong:

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()); 
     } 
    } 

lỗi của tôi là về tạo 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 

Một phần của Libro và Thể loại đang học là:

@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; 

.... 

@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; 

.... 

tập tin của tôi về Hibernate Cấu hình là:

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

Bất kỳ ý tưởng !! Cảm ơn !!

+1

Khi sửa lại ngoại lệ, sẽ hữu ích hơn nếu bạn bao gồm ngoại lệ ban đầu dưới dạng ngoại lệ lồng nhau, do đó, stacktrace ban đầu có thể được kiểm tra: 'new RuntimeException (" message của tôi ", cũ)' – SJuan76

+0

Trước khi ném một RuntimeException mới, in stacktrace với 'ex.printStackTrace();' hoặc sử dụng chiến lược (tốt hơn) được nhận xét bởi @ SJuan76. – eternay

+0

Bạn không nên bắt bất cứ điều gì cả. Nếu việc tạo 'EntityManagerFactory' không thành công, bạn vẫn không thể phục hồi. –

Trả lời

13

Bạn không cần cả hai hibernate.cfg.xmlpersistence.xml trong trường hợp này. Bạn đã thử xóa hibernate.cfg.xml và ánh xạ mọi thứ chỉ trong persistence.xml?

Nhưng khi câu trả lời khác cũng chỉ ra, điều này là không ổn như thế này:

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

Không bạn muốn sử dụng @Column để thay thế?

+0

Nếu bạn không thêm @Column, Hibernate bắt tất cả các thuộc tính của bạn dưới dạng cột. Nếu tôi xóa hibernate.cfg.xml tôi không thể truy cập vào BD của mình. "/hibernate.cfg.xml không tìm thấy" – Davidin073

+0

Mặt khác nếu tôi không xóa hibernate.cfg.xml và các lớp bình luận liên kết trong persistence.xml lỗi là "Giao dịch không hoạt động" – Davidin073

+0

Hãy xem bài đăng này: http: : //stackoverflow.com/questions/3807503/what-is-the-purpose-of-two-config-files-for-hibernate Bạn không cần cả hai. Bạn nên đi với persistence.xml của bạn. Nhưng có lẽ nó không được cấu hình đúng! Nhưng vấn đề là vì những gì tôi nói với bạn tôi đoán :) –

1

Ngăn chặn @JoinColumn(name="categoria") trên trường ID của lớp Categoria và tôi nghĩ rằng nó sẽ hoạt động.

+0

Tương tự, với o không có dòng này trong Categoria hoặc Libro, lỗi là như nhau. – Davidin073

+0

Sau khi xóa hibernate.cfg.xml và xóa @JoinColumn chú thích od Categoria, lỗi là "org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.david.Libro" ... tôi không biết tại sao .. – Davidin073

0

Nó làm việc cho tôi sau khi thêm phụ thuộc sau đây trong pom,

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

0

Sử dụng trên chú thích nếu ai đó đang phải đối mặt: - org.hibernate.jpa.HibernatePersistenceProvider cung cấp bền vững khi nó đã cố gắng tạo nhà máy quản lý đối tượng vùng chứa cho đơn vị lưu giữ thanh toán payenginePU. Đã xảy ra lỗi sau: [PersistenceUnit: paymentenginePU] Không thể xây dựng Hibernate SessionFactory ** Đây là một giải pháp nếu bạn đang sử dụng bảng kiểm toán Kiểm toán @

Sử dụng: -. @Audited (targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) trên lớp cha.

Các vấn đề liên quan