jpa一对多坚持孩子的身份证

时间:2010-01-27 00:09:37

标签: jpa

@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,然后保存它的孩子?

1 个答案:

答案 0 :(得分:1)

您的问题很可能是您正在使用IDENTITY ID生成(AUTO)。而是使用TABLE或SEQUENCE,然后可以预先分配您的ID,并且您可以在持久化时访问Item的id,而不是仅在插入后访问。