Java 使用注释映射时仍然需要XML映射吗?

Java 使用注释映射时仍然需要XML映射吗?,java,hibernate,annotations,Java,Hibernate,Annotations,我试图通过一本书来学习Hibernate,书中写道: Hibernate提供了一些必须配置的特性,如延迟加载、级联、缓存等。此信息表示为对象/关系映射元数据 Hibernate支持以下三种不同的策略来描述此元数据: 设置XML映射文件 用Hibernate XDoclet标记注释持久类 用Hibernate注释注释持久类 所以我认为这三种方法都是相互依存的。我正在尝试使用第三种方法进行注释。我有一节以下的课 @Entity @Table(name = "SOME_TABLE") publi

我试图通过一本书来学习Hibernate,书中写道:

Hibernate提供了一些必须配置的特性,如延迟加载、级联、缓存等。此信息表示为对象/关系映射元数据

Hibernate支持以下三种不同的策略来描述此元数据:

  • 设置XML映射文件
  • 用Hibernate XDoclet标记注释持久类
  • 用Hibernate注释注释持久类
所以我认为这三种方法都是相互依存的。我正在尝试使用第三种方法进行注释。我有一节以下的课

@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-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>

.. id和属性元素都已就位。

从书中的上述陈述中,我想我可以做一个或另一个,或者使用注释元数据映射,或者XML metdadata映射。只使用XML映射而不使用注释映射,效果很好,那么为什么不使用另一种方法呢?我是否使用
SomeClass.hbm.xml
文件在
hibernate.cfg.xml
文件中正确映射了
实体
类?如果是这样,使用注释映射创建类的正确方法是什么?这本书并没有真正解释这一点。这是一个前所未有的新话题

使用注释映射时仍然需要XML映射吗

绝对不是。 对于给定的实体,这两者是互斥的


不必详细介绍正在运行的特定应用程序服务器,以及配置Hibernate的各种不同方法,您所需要的只是
persistence.xml
和注释

由于持久性注释对您不起作用,因此由您来决定


你可能会发现这本书比你正在使用的任何一本书都要更新

基于注释的映射不需要XML映射,注释的全部思想是摆脱繁琐的XML

我已经有一段时间没有使用纯Hibernate(而不是通过JPA使用它),但是它应该只需要很少的XML配置,因为您也可以通过注释配置会话工厂

现在这是一个不完整的答案,因为我主要是通过JPA来考虑这个问题的,但是由于Hibernate实现了JPA,所以它应该是正确的