親と子の2つのオブジェクトがあります。子は、PARENTテーブル(MySQLデータベース)のPARENT_IDフィールドに戻る外部キーを持っています。
親オブジェクトと子オブジェクトが同時に作成/アセンブルされ、persistが呼び出された場合、子PARENT_ID外部キーは自動的に入力されません。
サンプルコード:
@Entity
@Table(name = "PARENT")
public class Parent {
@Column(name = "PARENT_ID")
private Long parentId;
@OneToMany(mappedBy = "parent")
private List<Child> children;
}
@Entity
@Table(name = "CHILD")
public class Child {
@Column(name = "CHILD_ID")
private Long childId;
@Column(name = "PARENT_ID")
private Long parentId;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
}
永続性のための2つのサンプルがあります:
1)Hibernate EntityManagerの使用:
@PersistenceContext
EntityManager em;
...
em.persist(parent);
2)Spring Data JPA JpaRepositoryインスタンスの使用:
public interface ParentRepository extends JpaRepository<Parent, Long> {
}
そして私のParentServiceImplで:
@Autowired
private ParentRepository parentRepository;
...
public Parent save(Parent parent) {
return parentRepository.save(parent);
}
外部キーを設定するために推奨される戦略は何ですか?親オブジェクトを最初に永続化し、次にその時点で子オブジェクトの外部キーを設定する必要がありますか?または、外部キーを自動的にまたは参照によって設定して、一度にすべてを永続化する方法はありますか?
編集:永続性サンプルが追加されました。
編集2(修正済み!):RyanStewartの2番目のポイントに従って問題が解決されました。子オブジェクトからLongparentIdフィールドを削除し、parentIdの@Column参照をゲッターに配置しました。また、参照を正しく設定するようにしてください(重要なのは、親への子参照です)。