QA@IT

JPA2.0で1対n関連の永続化の際に、n側に1側のIdが自動で設定されるようにする

4417 PV

可能でしょうか?関連は1からnへの一方向です。

現状、以下の方法で動作することは確認しています。(1側を親、n側を子としています)

  1. 親エンティティを作成して、persistする
  2. 子エンティティを作成。Idには親エンティティのIdを設定
  3. 子エンティティを親エンティティにセット
  4. 親エンティティをpersistする

上記で出来るのですが、子エンティティに自分で親のIdを設定するという部分を省けないかと考えています。
エンティティの関連は以下のようになっています。

@Entity
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(...)
    @SequenceGenerator(...)
    private Integer id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "user_id")
    private List<UserItem> userItems;

    // constructor/getter/setter...
}
@Entity
public class UserItem implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "user_id")
    private Integer userID;
    private String name;

    // constructor/getter/setter...
}
  • [private Integer userID;]て[private Integer userId;] にしたら [name = "user_id"]の設定不要になるんじゃ? -

回答

UserItemクラスの@IdがUserクラスの外部キーの場合は省略できません。
UserItemの@IdプロパティをuserIDとは別に定義することで省略できます。

@Entity
public class UserItem implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    private Integer id; // これを別途定義

    @Column(name = "user_id")
    private Integer userID;
    private String name;

    // constructor/getter/setter...
}
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。