我有两个对象,父母和孩子. Child有一个外键返回PARENT表(MySQL数据库)中的PARENT_ID字段.
当同时创建/组装父和子对象,并且调用persist时,不会自动填充Child PARENT_ID外键.
示例代码:
@Entity
@Table(name = "PARENT")
public class Parent {
@Column(name = "PARENT_ID")
private Long parentId;
@OneToMany(mappedBy = "parent")
private List 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)使用Hibernate EntityManager:
@PersistenceContext
EntityManager em;
...
em.persist(parent);
2)使用Spring Data JPA JpaRepository实例:
public interface ParentRepository extends JpaRepository {
}
在我的ParentServiceImpl中:
@Autowired
private ParentRepository parentRepository;
...
public Parent save(Parent parent) {
return parentRepository.save(parent);
}
填充外键的推荐策略是什么?是否应首先保留Parent对象,然后在该点设置Child对象外键?或者是否可以通过自动或通过引用设置外键来一次性保留所有内容?
编辑:添加了持久性样本.
编辑2(修复!):根据瑞安斯图尔特的第二点解决问题.我从Child对象中删除了Long parentId字段,并在getter上放置了parentId的@Column引用.还要确保正确设置引用(重要的是Child引用回Parent).