1

両方が主キーを共有する別のエンティティと 1 対 1 の関係を持つエンティティの単純な休止状態の例が必要です。主キーを自動生成するメイン エンティティのみを保存する必要があり、他の依存エンティティは自動的にカスケード保存されます。例えば:

public class Person {
    @Id
    @GeneratedValue
    @Column(name = "Id")
    private Long id;

    @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
    private Name name;
}

public class Name {
    @Id
    @Column(name = "Id")
    private Long id;

    @OneToOne
    @PrimaryKeyJoinColumn(name = "Id")
    private Person person;

    @Column
    private String first;
    @Column
    private String last;
}

Person person = new Person();
person.setName(new Name("first", "last"));
session.save(person);

これら 2 つのエンティティを簡単にセットアップできました。ただし、最初に人を保存してから、休止状態で名前を保存する必要があります。人を救うだけでいいということは非常に重要です。

4

1 に答える 1

0

私は同じ問題を抱えています。メイン エンティティが保存されるときに、このセカンダリ エンティティも保存されることを期待して、mappedBy 条件を「セカンダリ」エンティティに移動しようとしました。

メイン エンティティを保存すると、次の例外が生成されました (上記の例に適応):

また、構成によって生成されたテーブルを見ると、Person テーブルに Name テーブルの ID を指す FK「名前」があることがわかります。共有主キーを使用する目的は、このような FK 列を避けることです。

したがって、mappedBy をセカンダリ テーブルに移動することは解決策ではありません。

于 2010-11-11T04:31:42.557 に答える