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
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");
}
}
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
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? –
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