2012-01-20 15 views
3

エンティティに、このエンティティをマップする親エンティティがあるかどうかを確認するには、@OneToMany注釈を使用します。 マッピングは一方向Hibernateは自動的にマッピングテーブルを作成する、または場合は、@JoinColumn子テーブルの親IDを持つカラムを使用する親Hibernate:双方向関係のないOneToMany-Childエンティティの親を取得する

@Entity 
public class ParentEntity { 

    ... 

    @OneToMany(cascade=CascadeType.ALL) 
    private Collection<ChildEntity> childEntities; 

    ... 

上で定義されています。 子が永続化されると、hibernateは対応する親のIDをdb-tableに追加します。

私はアプリケーションロジックにこの「機能」は必要なく、変更が必要なエンティティがすでにロードされているので、双方向のリレーションを定義したくありません。レプリケーションの問題については、親が必要です。これは、私は別のDBスキーマ(別のテーブル構造を持つ)にいくつかのデータをエクスポートする必要があることを意味します。

私はインターセプタのインターフェースによって定義された「のOnSave」方法でレプリケーション・アクションをトリガーするインターセプターを使用しています。親が新しい子を取得した場合、子がトリガーする永続アクションのみが存在します。私はそれが属している親を知らない。

本当に助けていただきありがとうございます。

ありがとうございます!

答えて

0

質問を使用しないでこの問題を解決しました。

Hibernateのインターセプタインターフェイスは、コレクションに関する3つのメソッドを定義します。

エンティティ(この場合ParentEntity)上のコレクションは3つの方法のいずれかが呼び出された変更された場合:

public void onCollectionRecreate(Object collection, Serializable key) 
     throws CallbackException { 
} 


public void onCollectionRemove(Object collection, Serializable key) 
     throws CallbackException { 
} 

public void onCollectionUpdate(Object collection, Serializable key) 
     throws CallbackException { 
} 

オブジェクト「コレクション」はタイプ、次いであるPersistenceBagそこから " 「所有者」を読み取ることができます。この場合、それは親になります。別のヒント:メソッドの2番目のパラメータは、「所有者」の休止状態キーです。私の目的のために、私はHibernateエンティティをターゲットシステムのテーブルにマップする設定ファイルを持っています。この構成では、parnent Javaクラスが定義されています。

3
int count = session.createCriteria(Parent.class) 
    .createCriteria("childEntities") 
    .add(Restrictions.eq(childIdInQuestion)) 
    .setProjetction(Projections.rowCount()) 
    .uniqueResult(); 

Boolean hasParent = count > 0; 
+0

ありがとう、あなたの解決のためのfiro!確かに私は私の親のIDを見つけることができます。少し欠点は、私は常にクエリを実行する必要があります。私は、エンティティインターセプタのような中心的な位置でこれを使用すると、システムが遅くなる可能性があると思います。私が思っていたことは、EntityPersisterのようないくつかのハイバネート内部を通して、この情報を追加のクエリトラフィックを引き起こさずに得ることでした。 – theFriedC

+0

親へのlazyloaded参照は行く方法です。あなたは子供の親を知りたいですか? 'Boolean hasParent = child.parent!= null'をチェックすると、余分なトラフィックがない最も簡単な方法です – Firo

+0

私は持っていないし、双方向関係を構築したくないので、child.parentはありません(大きなシステム - 。私はかなり異なるデータ構造にエクスポートする必要があるので、少し混乱します。それにもかかわらず、私は解決策を見つけました - 下を見てください。おかげでFiro! – theFriedC

関連する問題