1

親テーブル A と子テーブル B があり、A.id と B.id をリンクする外部キーがあるとします。問題は、この親テーブルと FK が最近作成され、永続化する場所が多すぎることです。親テーブルを永続化して子テーブルにリンクする簡単な方法を待っています。Hibernate インストゥルメントを使用してこのタスクを処理することは可能ですか? カスケードを使用しようとしましたが、成功しませんでした。親エンティティを永続化する場合にのみ機能するようです。

したがって、構造は次のとおりです。

@Entity
class A {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "a_id")
    long id;
}



@Entity
class B {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "b_id")
   long id; // FK to a_id
}

class BDao {
    void store(B b) {
       session.save(b); // to many places
}
}

どんな助けにも感謝します、ありがとう!

4

1 に答える 1

0

うん!誰かが答えを知りたい場合に備えて、解決策をここに残しておきます。おそらく、皆さんは私よりも同じ問題を解決するのに費やす時間が少ないでしょう。したがって、最初に @Inheritance(strategy= InheritanceType.JOINED) アノテーションを使用して親エンティティを記述する必要があります。

@Entity
@Inheritance(strategy= InheritanceType.JOINED)
@PrimaryKeyJoinColumn(name = "a_id")
public class A {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "a_id")
    protected Integer id;
}

次に、子エンティティを次のように記述します

@Entity
@AssociationOverride(name="a_id", joinColumns = @JoinColumn(name="b_id"))
@PrimaryKeyJoinColumn(name = "b_id")
public class B extends A {
    ...
}

ここに@AssociationOverrideを残しました。私の場合、主キー名が異なるため、おそらく誰かにも役立つからです。

それでおしまい!子エンティティを永続化すると、親テーブル用と子テーブル用の 2 つの行が作成されます。

于 2013-06-07T06:36:03.670 に答える