我正在从事hibernate3项目,并面临
“未知实体”异常
. 我拥有所有的类,这些类通过注解Map到表中。我已经在默认的“hibernate.cfg.xml”文件中创建了所有必需的条目。
我得到一个“未知实体异常”,并试图找出为什么我得到相同的,即使我有所有需要的配置准确。
我已经为'@entity'注解包含了正确的包,它是:' javax.persistence.Entity
'还为'hibernate.cfg.xml'文件中的条目'mapping class'提供了完整的类名。
有人知道例外的其他原因吗?
以下是实体类:
package com.myproj;
import java.io.serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name="STUDENT")
public class Student implements Serializable{
@Id
@Column(name="student_id")
private Long studentId;
@Column(name="student_name")
private Long studentName;
//getters and setters
}
创建sessionfactory的代码段
SessionFactory sf;
Configuration config = new AnnotationConfiguration();
sf = config.configure().buidSessionFactory();
Student student = null;
Session session = sf.openSession();
student = (Student)session.get(Student.class, new Integer(1)); //Unknown Entity Exception thrown over here while trying to retrieve a Student with ID 1.
休眠.cfg.xml
<hibernate-configuration>
<session-factory>
<!-- All the data connection entries are provided here -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping class="com.myproj.Student" />
</session-factory>
</hibernate-configuration>
请注意,提供了所有数据连接条目,如
异常的堆栈跟踪:
org.hibernate.MappingException: Unknown entity: com.myproj.Student
org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:629)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:91)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:908)
org.hibernate.impl.SessionImpl.get(SessionImpl.java:845)
org.hibernate.impl.SessionImpl.get(SessionImpl.java:838)
com.myproj.StudentBean.search(StudentBean.java:50)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
2条答案
按热度按时间jqjz2hbq1#
您的hibernate配置和实际类名中必须有输入错误。你所提供的一切
以及
所以我猜你已经用手把它命名了,所以我怀疑你在真实的类名中也有类似的拼写错误。
我建议首先使用jpa2.*而不是普通的hibernate。您仍然可以使用它作为存在提供者。
ldxq2e6h2#
您提到您使用的是Hibernate3,但不是哪个次要版本,所以我首先要指出一些可能有用的东西,因为您似乎还处于项目的早期阶段,可能有一些灵活性。不过,我的答案不会偏离Hibernate3的细节。
Hibernate3.2中添加了注解支持
AnnotationConfiguration
似乎是在Hibernate3.5中添加的(因此我假设您使用的是Hibernate3.5+)AnnotationConfiguration
在hibernate 3.6中已弃用,并且中提供了所有等效功能Configuration
当前版本现在是hibernate 5.2.12您在下面的一行中有一个输入错误,但我假设您的代码中没有这个错误,或者您将有一个编译错误而不是一个
MappingException
:我建议如下:
确认您的配置文件名
hibernate.cfg.xml
而且没有错别字确认一下
hibernate.cfg.xml
在你的类路径中您可以尝试显式指定
hibernate.cfg.xml
例如,例如,在我的项目中,我使用maven,因此我的配置文件位于
<path/to/project>/<project_name>/src/main/resources/hibernate.cfg.xml
,因此我不必显式地提供路径。为了简洁起见,您可能故意省略了xmldtd数据,我不知道这与
MappingException
您看到了,但请确保xml dtd在您的hibernate.cfg.xml
文件:以下内容对于
<mapping />
你生活中的元素hibernate.cfg.xml
文件,我很犹豫是否提出这个建议,因为如果你没有得到<mapping />
元素hibernate.cfg.xml
工作时,您必须为任何和所有要持久化的带注解pojo执行此操作。然而,作为一个绝对的最后手段,你可以尝试addAnnotatedClass()
: