2013-05-20 18 views
7

Tôi đang cố gắng thiết lập một dự án jpa 2.0 đơn giản bằng cách làm theo thông tin được cung cấp bởi tài liệu của giáo viên của tôi. Tôi đã làm việc này hàng giờ liền, nhưng dù tôi có làm gì thì cũng luôn có ngoại lệ khi cố gắng tạo ra một EntityManagerFactory: Tôi đã tìm thấy một số câu hỏi tương tự về ngoại lệ này, nhưng không có giải pháp nào mà tôi có thể đi làm. Tôi làm gì sai ở đây?javax.persistence.PersistenceException: Không có nhà cung cấp Persistence cho EntityManager có tên

Tôi tạo ra dự án này từ Eclipse (không dấu nhắc lệnh)

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named course 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) 
    at message.SaveMessage.main(SaveMessage.java:8) 

cấu trúc thư mục

enter image description here

persistence.xml tôi

<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="course" transaction-type="RESOURCE_LOCAL"> 

     <provider>org.hibernate.ejb.HibernatePersistence</provider> 


     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 

      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/StudentDB" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="pasapas2005" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Lớp học của tôi

package message; 

import java.io.Serializable; 

import javax.persistence.*; 

@Entity 
public class Message implements Serializable { 

    private long id; 
    private String text; 

    public Message() { 

    } 

    public Message(long id, String text) { 
     this.setId(id); 
     this.setText(text); 

    } 

    @Id 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

} 

My thử nghiệm của tôi (chính) lớp

package message; 

import javax.persistence.*; 

public class SaveMessage { 

    public static void main(String[] args) { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("course"); 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 

     Message message = new Message(1, "Hello world"); 
     em.persist(message); 
     tx.commit(); 
     em.close(); 
     System.out.println("message saved"); 

    } 

} 
+0

Kiểm tra xem lớp org.hibernate.ejb.Hibernat ePersistence có trên đường dẫn lớp của bạn không. – JamesB

+0

Cảm ơn bạn đã trả lời. Câu hỏi của tôi có vẻ ngu ngốc nhưng làm thế nào để tôi kiểm tra classpath của tôi? –

+0

Trong nhật thực, với dự án của bạn mở, nhấn Ctrl + Shift + T và bắt đầu nhập tên lớp. Nếu nó không xuất hiện trong danh sách, bạn biết nó không phải trên classpath. – JamesB

Trả lời

5

Tôi nghĩ lớp org.hibernate.ejb.Hibernat ePersistence là mất tích từ classpath của bạn. Thêm nó vào tệp pom.xml của bạn:

<dependency> 
<groupId>org.hibernate</groupId> 
<artifactId>hibernate-entitymanager</artifactId> 
<version>3.6.10.Final</version> 
</dependency> 

Thay thế 3.6.10.Thực hiện với phiên bản Hibernate thích hợp.

+0

Không hoàn toàn cố định nhưng tối đa thông báo lỗi đã biến mất khỏi vị trí thành một thông báo lỗi mới cho biết Ngoại lệ trong chuỗi "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory. Nhưng bây giờ tôi nghĩ rằng tôi biết làm thế nào để có được nó để làm việc –

+0

Hình như bạn đang thiếu slf4j quá. – JamesB

+0

Lưu ý: Tôi đã có ngoại lệ này sau khi di chuyển một lớp đến một gói mới còn thiếu để phản ánh sự thay đổi persistence.xml. –

0

Tôi gặp vấn đề tương tự. Sau rất nhiều tìm kiếm, tôi thấy rằng giải pháp chỉ là cài đặt từ thị trường nhật thực là HiberObjects.