Comment enregistrer automatiquement des entités avec JPA / Hibernate: Entité inconnue
Je suis perplexe avec Hibernate/JPA problème de configuration qui empêche mon JPA-entités annotées d'être automatiquement inscrit:
java.lang.IllegalArgumentException: Unknown entity: com.example.crm.server.model.Language
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:671)
at com.example.crm.server.model.Language.persist(Language.java:64)
at com.example.crm.server.LanguageTest.testPersistAndRemove(LanguageTest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Dans ma classe d'entité que j'ai:
@Entity
@Table(name="Languages")
public class Language implements Serializable
{
@Id
private Long id;
private String name;
//etc...
}
Et dans MySQL, les Langues de table ressemble à:
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| Language_ID | int(11) | NO | PRI | NULL | |
| Name | char(18) | YES | | NULL | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Et mon persistence.xml ressemble:
<?xml version="1.0" encoding="UTF-8"?>
<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_1_0.xsd"
version="1.0">
<persistence-unit name="crm">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/crm"/>
<property name="hibernate.connection.username" value="crmuser"/>
<property name="hibernate.connection.password" value="mypass"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.idleTestPeriod" value="30"/>
<property name="hibernate.c3p0.timeout" value="0"/>
<property name="hibernate.c3p0.max_statements" value="0"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.query.jpaql_strict_compliance" value="false"/>
<property name="hibernate.validator.apply_to_ddl" value="false"/>
<property name="hibernate.validator.autoregister_listeners" value="false"/>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
MODIFIER: voici comment j'obtiens mon EntityManager et de la persistance:
public void persist() { EntityManager em = entityManager(); try { em.getTransaction().begin(); em.persist(this); em.getTransaction().commit(); } finally { em.close(); } } public static EntityManager entityManager() { return EMF.get().createEntityManager(); }
source d'informationauteur George Armhold | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Il s'est avéré être assez simple: la liste des classes directement dans le persistence.xml fichier. Les deux armandino et MikelRascher m'a conduit à cette réponse, bien que de manière indirecte, de sorte que les accessoires.
Ici est la persistence.xml j'utilise maintenant:
Mise à jour
Voici un plus JPA comme approche:
Et
orm.xml
devrait ressembler à quelque chose comme ceci:Comment êtes-vous de la construction de votre gestionnaire d'entité?
Vous devriez regarder le niveau de l'INFO log4j des messages de mise en veille prolongée par la définition de cette dans log4j.propriétés:
Vous devriez voir votre classe dans les messages:
Aller de DÉBOGAGE si vous avez besoin de plus d'informations.
AUSSI
Vous n'êtes pas de mentionner le nom de votre unité de persistance lorsque vous créez le gestionnaire de l'entité. Peut-être que ce n'est pas important: