java - 使用注释映射时还需要 XML 映射吗?

标签 java hibernate annotations

我正在尝试通过一本书来学习 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/

相关文章:

java - 为什么 java.util.Date 给我错误的时间?

java - 尝试使用 Java High Level REST Client 查询 Long 类型时出现问题

java - 实体 - 从 session 中检索的两个实体是否具有相同的值

java - OWLAPI : Get the IRI in a AnnotationAssertion

java - 如何在java主程序中打印注解接口(interface)的默认值

java - 如何在具有同名变量的静态函数中访问全局静态变量

java - 请确认 .class 在 java 中的作用

java - 如何验证 JPA 实体的网站 URL 字段?

java - 如何优雅地处理Target Unreachable

ios - 遍历从属性列表中读入的 NSDictionary 证明很麻烦