11

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

例如,我有以下 Document 类:

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

和以下 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>

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

<property name="hibernate.mapping.precedence">class, hbm</property>
<mapping class="Document"/>
<mapping resource="Document.hbm.xml"/>

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

有谁知道是否有办法同时拥有注释和 HBM 映射?

谢谢

卡姆兰

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

4

1 回答 1

12

您不能将它们混合用于同一个课程。在休眠注释第 1.2 节的末尾:

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

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

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

于 2012-07-04T17:12:40.330 回答