Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建记录原因org.hibernate.MappingException:未知实体_Java_Database_Hibernate_Jdbc - Fatal编程技术网

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为了简单起见,我刚刚缩短了包名。非常感谢。