我正在尝试用一本书来学习Hibernate:
Hibernate提供必须配置的延迟加载,级联,缓存等功能。此信息表示为对象/关系映射元数据。
Hibernate支持以下三种不同的策略来描述这种元数据:
- 设置XML映射文件
- 使用Hibernate XDoclet标记注释持久化类
- 使用Hibernate注释注释持久化类
所以我认为这三种方法中的每一种都是相互依赖的。我试图使用带注释的第三种方法。我有以下课程
@Entity
@Table(name = "SOME_TABLE")
public class SomeClass implements Serializeable {
/// ...
}
我尝试在<{1}}中运行而没有任何映射,我得到此异常
hibernate.cfg.xml
所以我认为org.hibernate.MappingException: Unknown entity:com...SomeClass
文件中需要有一些映射。所以我尝试创建一个空的映射文件hibernate.cfg.xml
SomeClass.hbm.xml
并将其映射到<hibernate-mapping>
<class name="somepackage.SomeClass" table="SOME_TABLE">
</class>
</hibernate-mapping>
hibernate.gfg.xml
但后来我得到<hibernate-configuration>
<session-factory>
... propert tags
<mapping resource="somepackage/SomeClass.hbm.xml"/>
</session-factory>
</hibernate-configuration>
SaxParseException
这完全合理,因为内容 不完整。
但是当我填写所有必要的属性时,一切正常,表格更新。
SAXParseException ... The content of element type "class" is incomplete
从本书上面的陈述中,我想我可以做其中一个,或者使用注释元数据映射 或 XML metdadata mappimg < / strong>即可。使用XML映射而不用注释映射它可以正常 ,那么为什么不用另一种方式呢?我没有使用<hibernate-mapping>
<class name="com.underdogdevs.hibernatepractice.StudentEntity" table="STUDENT">
.. id and property elements all in place.
</class>
</hibernate-mapping>
文件在Entity
文件中正确映射hibernate.cfg.xml
类吗?如果是这样,使用注释映射的类的正确方法是什么?这本书并没有真正解释这一点。在此之前它会进入一个新主题。
答案 0 :(得分:2)
使用注释映射时是否仍需要XML映射?
这两者对于给定的实体是互斥的。
不详细介绍您正在运行的特定应用程序服务器,以及配置Hibernate的各种不同方法, 需要的所有内容都是persistence.xml
和注释。< / p>
由于持久性注释对您不起作用,因此由您figure out why.
决定您可能会发现Java EE 7 tutorial比您正在使用的任何图书都更新。
答案 1 :(得分:0)
基于注释的映射不需要XML映射,注释的整个想法是摆脱繁琐的XML。
自从我使用纯Hibernate(而不是通过JPA使用它)已经有一段时间了,但它应该只需要很少的XML配置,因为你也可以通过注释配置会话工厂。
现在这是一个不完整的答案,因为我主要通过JPA思考这个问题,但是由于Hibernate实现了JPA,它应该成立。