QA@IT
«質問へ戻る

質問を投稿

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

可能でしょうか?関連は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...
}
可能でしょうか?関連は1からnへの一方向です。

現状、以下の方法で動作することは確認しています。(1側を親、n側を子としています)
 1. 親エンティティを作成して、persistする
 1. 子エンティティを作成。Idには親エンティティのIdを設定
 1. 子エンティティを親エンティティにセット
 1. 親エンティティをpersistする

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

```java
@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...
}
```
```java
@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...
}
```