Java 创建记录原因org.hibernate.MappingException:未知实体
我试图在表中创建一条记录,但它给了我以下异常Java 创建记录原因org.hibernate.MappingException:未知实体,java,database,hibernate,jdbc,Java,Database,Hibernate,Jdbc,我试图在表中创建一条记录,但它给了我以下异常 org.hibernate.MappingException: Unknown entity: com.Person 我的get(Person)方法工作正常并返回结果 DAO类: public void create(Person person){ Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction();
org.hibernate.MappingException: Unknown entity: com.Person
我的get(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-configuration>
<session-factory>
//other database properties
<mapping resource="com/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
<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
}
该问题是由于在hbm.xml文件中使用实体名称属性引起的。如果执行此操作,则在调用save时还必须提供相同的实体名称:
session.save("person", person);
一个更简洁的选项是从映射文件中删除entity name属性,这样您就可以调用save(person),而不必提供实体名称(默认为FQ类名)。然后通过传递类而不是字符串名来创建条件。例如:
session.createCriteria(Person.class);
那么您的
Person
类在哪个包中?@DavidWallace my Person类及其hbm文件在不同的包中。这会引起问题吗?但是我的get()很好用。只要Hibernate能找到它,把HBM文件放在哪里并不重要。但是您的HBM文件说您的Person
类位于名为com
的包中。如果它真的在那里,那没关系;在未映射的类上调用session.get()不会像您预期的那样抛出错误(我希望它会这样)。它将返回null。在未映射的类上调用save()时,将出现错误。因此,您的hibernate配置并没有像您预期的那样得到提升。能否将代码发布到创建Hibernate SessionFactory的位置。@DavidWallace为了简单起见,我刚刚缩短了包名。非常感谢。