创建记录原因org.hibernate.MappingException:未知实体

时间:2014-03-05 18:15:24

标签: java database hibernate jdbc

我正在尝试在表中创建一条记录,但它给了我以下异常。

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
}

1 个答案:

答案 0 :(得分:2)

该问题是由hbm.xml文件中的entity-name属性引起的。如果您这样做,那么在调用save时,您还必须提供相同的实体名称:

session.save("person", person);

更清洁的选项是从映射文件中删除entity-name属性,这样您就可以调用save(person)而不必提供实体名称(默认为FQ类名称)。然后通过传递类而不是字符串名来创建条件。例如:

session.createCriteria(Person.class);