我有两个对象,Parent 和 Child。Child 有一个外键返回 PARENT 表(MySQL 数据库)中的 PARENT_ID 字段。
当同时创建/组装 Parent 和 Child 对象并调用 persist 时,不会自动填充 Child 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;
}
我有两个持久性样本:
1)使用休眠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);
}
填充外键的推荐策略是什么?是否应该先保留 Parent 对象,然后再保留 Child 对象的外键?或者有没有办法通过自动或通过引用设置外键来一次持久化它?
编辑:添加了持久性示例。
编辑 2(已修复!):根据 Ryan Stewart 的第二点解决了问题。我从 Child 对象中删除了 Long parentId 字段,并将 parentId 的 @Column 引用放在 getter 上。还要确保正确设置参考(重要的是子参考回到父)。