我正在尝试在表中创建一条记录,但它给了我以下异常。
org.hibernate.MappingException: Unknown entity: com.Person
我的get(Person person)
方法正常工作并返回结果。
DAO课程:
public void create(Person person){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(person);//----------------------->this throws exception
session.flush();
tx.commit();
session.close();
}
public List<Person> get(Person person){
criteria = createCriteria("person");
criteria.add(Restrictions.eq("person", person.getFirstName()));
return criteria.list();
}
hibernate.cfg.xml文件:
<hibernate-configuration>
<session-factory>
//other database properties
<mapping resource="com/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
Person.hbm.xml文件:
<hibernate-mapping default-lazy="false">
<class name="com.Person" table="Person" entity-name="person">
<id name="personId" type="integer" column="PERSON_ID">
<generator class="increment"/>
</id>
<property name="firstName" column="FIRST_NAME"/>
<property name="address" column="ADDRESS"/>
</class>
</hibernate-mapping>
实体映射到表格人员:
public class Person implements Serializable{
private Integer personId;
private String firstName;
private String address;
public Person(){}
//getters setters
}
答案 0 :(得分:2)
该问题是由hbm.xml文件中的entity-name属性引起的。如果您这样做,那么在调用save时,您还必须提供相同的实体名称:
session.save("person", person);
更清洁的选项是从映射文件中删除entity-name属性,这样您就可以调用save(person)而不必提供实体名称(默认为FQ类名称)。然后通过传递类而不是字符串名来创建条件。例如:
session.createCriteria(Person.class);