使用注释映射时是否仍需要XML映射?

时间:2014-01-22 06:17:23

标签: java hibernate annotations

我正在尝试用一本书来学习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类吗?如果是这样,使用注释映射的类的正确方法是什么?这本书并没有真正解释这一点。在此之前它会进入一个新主题。

2 个答案:

答案 0 :(得分:2)

  

使用注释映射时是否仍需要XML映射?

绝对不是。

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


不详细介绍您正在运行的特定应用程序服务器,以及配置Hibernate的各种不同方法, 需要的所有内容都是persistence.xml和注释。< / p>

由于持久性注释对您不起作用,因此由您figure out why.

决定

您可能会发现Java EE 7 tutorial比您正在使用的任何图书都更新。

答案 1 :(得分:0)

基于注释的映射不需要XML映射,注释的整个想法是摆脱繁琐的XML。

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

现在这是一个不完整的答案,因为我主要通过JPA思考这个问题,但是由于Hibernate实现了JPA,它应该成立。