Hibernate:从映射迁移到注释 - 是否可以混合使用hbm和注释?

mar*_*cam 11 java spring annotations hibernate hibernate-mapping

我目前正在将我的项目从Hibernate HBM Mappings迁移到Annotations.就处理小班而言,一切都很简单.但我有相同的大类,我尝试混合这个类的映射和注释.我读到这可以通过使用hibernate属性"hibernate.mapping.precedence"并将其设置为"class,hbm"而不是"hbm,class"来实现.(参见:在Hibernate中:是否可以为实体混合注释和XML配置?)

例如,我有以下Document类:

@Entity
@Table(name="DOCUMENT")
public class Document  {
   @Column(name="DESCRIPTION")
   private String description;
}
Run Code Online (Sandbox Code Playgroud)

以及以下Document.hbm.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    
<hibernate-mapping>
  <class name="Document" table="DOCUMENT" >
    <id name="id" column="DOCUMENT_ID" type="long" />
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

在我的hibernate.cfg.xml文件中,我把:

<property name="hibernate.mapping.precedence">class, hbm</property>
<mapping class="Document"/>
<mapping resource="Document.hbm.xml"/>
Run Code Online (Sandbox Code Playgroud)

我的问题是: - 如果我把"class,hbm"作为优先级,那么我只有类文档中的注释 - 如果我把"hbm,class"那么我只有我在hbm资源中的映射

如果有办法同时拥有注释和HBM映射,有没有人知道?

谢谢

卡姆兰

PS:我使用:Hibernate 4.1.4和Spring Framework 3.1.1

Pab*_*blo 12

你不能把它们混合在一起.在hibernate注释的1.2节结尾处:

您可以将带注释的持久类和经典的hbm.cfg.xml声明与相同的SessionFactory混合使用.但是,您不能多次声明一个类(无论是注释还是通过hbm.xml).您也不能在实体层次结构中混合配置策略(hbm与注释).

为了简化从hbm文件到注释的迁移过程,配置机制检测注释和hbm文件之间的映射重复.然后,HBM文件在类到类的基础上优先于带注释的元数据.您可以使用hibernate.mapping.precedence属性更改优先级.默认值为hbm,class,将其更改为类,当发生冲突时,hbm将优先考虑带注释的类而不是hbm文件.

使用注释和hbm文件两次声明一个类.因此,在类到类的基础上,一个将优先于另一个(类到类的基础意味着对于每个类,只使用hbm文件或注释).