Sto provando a configurare un semplice progetto jpa 2.0 seguendo le informazioni fornite dalla documentazione del mio insegnante. Sono stato su questo per ore ora, ma non importa quello che faccio sempre ottengo questa eccezione quando provo a creare una EntityManagerFactory: Ho trovato alcune domande simili riguardo questa eccezione, ma nessuna soluzione che io sia in grado andare a lavoro. Cosa sto facendo di sbagliato qui?javax.persistence.PersistenceException: nessun provider di persistenza per EntityManager denominato
Ho creato questo progetto da Eclipse (senza prompt dei comandi) annuario
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)
struttura
mia 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="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>
La mia classe
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;
}
}
mio mio tester (principale) classe
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");
}
}
Verificare che la classe org.hibernate.ejb.Hibernat ePersistence si trovi sul percorso di classe. – JamesB
Grazie per la risposta. La mia domanda può sembrare stupida, ma come posso controllare il mio classpath? –
In eclissi, con il progetto aperto, premi Ctrl + Maiusc + T e inizia a digitare il nome della classe. Se non appare nell'elenco, sai che non è su classpath. – JamesB