我正在尝试通过一本书来学习 Hibernate,其中指出:
Hibernate 提供了必须配置的功能,例如延迟加载、级联、缓存等。此信息表示为对象/关系映射元数据。
Hibernate supports the following three different strategies to describe this metadata:
- Setting up XML mapping files
- Annotating persistent classes with Hibernate XDoclet tags
- Annotating persistent classes with Hibernate annotations
所以我认为这三种方法都是相互依赖的。我正在尝试使用带注释的第三种方法。我有以下类(class)
@Entity
@Table(name = "SOME_TABLE")
public class SomeClass implements Serializeable {
/// ...
}
我尝试在 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
这完全有道理,因为内容不完整。
但是当我填写所有必要的属性时,一切正常,表格已更新。
<hibernate-mapping>
<class name="com.underdogdevs.hibernatepractice.StudentEntity" table="STUDENT">
.. id and property elements all in place.
</class>
</hibernate-mapping>
<小时/>
根据书中的上述陈述,我认为我可以选择其中之一,使用注释元数据映射或XML元数据映射强>。 只是使用 XML 映射而不注释映射就可以正常工作,那么为什么不采用其他方式呢?我不是映射Entity
吗?在 hibernate.cfg.xml
中正确分类使用 SomeClass.hbm.xml
文件文件?如果是这样,使用注释映射的类的正确方法是什么?这本书并没有真正解释这一点。在此之前它就进入了一个新主题。
最佳答案
Is XML mapping still required when using annotation mapping?
绝对不是。
对于给定实体,两者是互斥的。
<小时/>无需详细了解您正在运行的特定应用程序服务器,以及配置 Hibernate 的各种不同方法,您应该需要的只是 persistence.xml
以及注释。
由于持久性注释不适合您,因此由您决定 figure out why.
您可能会找到Java EE 7 tutorial比您正在使用的任何书都更新。
关于java - 使用注释映射时还需要 XML 映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21275596/