我无法弄清楚如何简单地将子实体与现有父实体相关联。
@Entity
@Table(name = "parent")
@Document(indexName = "parent")
public class Parent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(unique = true)
private Child child;
//getters, setters
}
孩子
@Entity
@Table(name = "child")
@Document(indexName = "child")
public class Child implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "child")
private Parent parent;
//getters, setters
}
这是两个基本模型。
父级已经存在于数据库中,我想添加一个新的子级。
Child childEntity = childRepository.save(child);
该子项的填充如下: child.json
{
"name": "smallChild",
"parent": { "id" : "1" }
}
我希望能够保存孩子,并使其自动与父母有关系。
我做了一些非常讨厌的代码...
最终是6位数的数据库查询。
我尝试观看lynda.com的一些课程视频,但没有帮助。
谢谢!
答案 0 :(得分:0)
父级主键或完整的实体都是必需的。 如果父级的ID可用,那么如果目标只是保存,则不需要为获取父级对象而进行的额外查询。
如果您拥有父母的ID,则可以将子实体另存为:
Child child = new Child();
//...
//Setters for child
//...
//Now just create a parent object and set the id to it
Parent p = new Parent();
p.SetId(parentId); // as the parentId is already vailable
child.setParent(p);
Child childEntity = childRepository.save(child);