11

現在、プロジェクトを Hibernate HBM Mappings から Annotations に移行しています。少人数のクラスを扱う限り、すべてが簡単でした。しかし、同じ巨大なクラスがあり、このクラスのマッピングと注釈の両方を混在させようとしています。これは、休止状態のプロパティ「hibernate.mapping.precedence」を使用し、「hbm、class」ではなく「class、hbm」に設定することで可能であると読みました。(参照: In Hibernate: is it possible to mix Annotations and XML configuration for an Entity? )

たとえば、次の 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"/>

私の問題は次のとおりです。-優先順位に「クラス、hbm」を配置すると、クラスDocumentに注釈のみが表示されます-「hbm、クラス」を配置すると、hbmリソースにマッピングのみが表示されます

Annotations と HBM マッピングの両方を持つ方法があるかどうかは誰にもわかりませんか?

ありがとう

カムラン

PS: 私は使用します: Hibernate 4.1.4 および Spring Framework 3.1.1

4

1 に答える 1

12

同じクラスにそれらを混在させることはできません。hibernate アノテーションのセクション 1.2の最後:

アノテーション付きの永続クラスと従来の hbm.cfg.xml 宣言を同じ SessionFactory と混在させることができます。ただし、クラスを複数回宣言することはできません(注釈付きまたは hbm.xml を介して)。エンティティ階層で構成戦略 (hbm と注釈) を混在させることもできません。

hbm ファイルから注釈への移行プロセスを容易にするために、構成メカニズムは注釈と hbm ファイル間のマッピングの重複を検出します。HBM ファイルは、クラスごとに注釈付きメタデータよりも優先されます。hibernate.mapping.precedence プロパティを使用して優先度を変更できます。デフォルトは hbm, class ですが、これを class, hbm に変更すると、競合が発生したときに hbm ファイルよりも注釈付きのクラスが優先されます。

注釈と hbm ファイルを使用すると、クラスが 2 回宣言されます。したがって、クラスごとに一方が他方よりも優先されます (クラスごとにクラスごとに hbm ファイルまたは注釈のみが使用されることを意味します)。

于 2012-07-04T17:12:40.330 に答える