Tôi đang bối rối với một vấn đề cấu hình Hibernate/JPA đó là ngăn chặn các đối tượng JPA-chú thích của tôi khỏi bị tự động đăng ký:Làm thế nào để tự động đăng ký tổ chức với JPA/Hibernate: Unknown tổ chức
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)
Trong lớp thực thể của tôi tôi có:
@Entity
@Table(name="Languages")
public class Language implements Serializable
{
@Id
private Long id;
private String name;
// etc...
}
Và trong MySQL, bảng Ngôn ngữ trông giống như:
+-------------+----------+------+-----+---------+-------+
| 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)
Và Persis của tôi tence.xml trông giống như:
<?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>
EDIT: dưới đây là cách tôi nhận được EntityManager của tôi và sự bền bỉ:
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(); }
Bạn thật tuyệt vời !! Tôi có thể khắc phục vấn đề của mình. Đôi ngón tay cái lên !!!! Tôi sẽ đề nghị bạn chấp nhận câu trả lời của bạn – Chris