@Entity 公共类项目{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "item")
private List<Feature> features= new ArrayList<Feature>();
儿童实体:
public class Feature{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String attribute1;
private String attribute2;
private String featureCode;
@ManyToOne
private Item item;
.....
public String getFeatureCode() {
if (item != null) {
feature = item.getId() + attribute1 + attribute2;
}
return feature;
}
你可以从我的注释中看到,当Item Pesist时,它也会坚持它的孩子。
由于合成ID的声誉很差,我真的需要在Feature中使用其父ID,以便于查询,我添加了一个featureCode来将三列附加在一起。
我的问题是,Item的id是从数据库生成的。从调试信息,我猜它首先是相同的项目,然后更新功能的项目。这会导致我的featureCode的item.getId()null结果。
是否有可能改变一对多的级联持续行为,比如先坚持Item,然后保存它的孩子?
答案 0 :(得分:1)
您的问题很可能是您正在使用IDENTITY ID生成(AUTO)。而是使用TABLE或SEQUENCE,然后可以预先分配您的ID,并且您可以在持久化时访问Item的id,而不是仅在插入后访问。