添加到子集合时,Hibernate @version不会递增

时间:2013-12-19 01:29:59

标签: java hibernate

我正在使用Hibernate 4.1.4.Final,我在一个单独的表中有一个版本和子列表的父级。

我遇到的问题是当我添加到子列表时,父级的版本没有增加。我可以手动完成,但这部分地违背了使用@version注释的目的。

如何在更新子项或添加到子项列表时让父项的版本增加?

父:

@Entity
@Table(name = "Parent")
public class Parent implements java.io.Serializable {

  @Version
  @Column(name = "version")
  private int _version;

  @OneToMany(mappedBy = "_parent", cascade = javax.persistence.CascadeType.ALL)
  @OrderBy(clause = "id")
  @Cascade({CascadeType.ALL})
  private List<Child> _children= new ArrayList<Children>();
}

孩子:

@Entity
@Table(name = "Child")
public class Child {


   @Id
   @Column(name = "id")
   @GeneratedValue(generator = "native")
   @GenericGenerator(name = "native", strategy = "native")
   private Integer _id;

   @ManyToOne
   @JoinColumn(name = "parentId")
   private Parent _parent;
}

谢谢

1 个答案:

答案 0 :(得分:2)

虽然没有记录,但您可以在一对多方面添加@OptimisticLock(excluded = false)。我使用hibernate-core 4.3.5.Final进行了测试。

要符合JPA标准,您需要将Parent - 而不是Child - 作为集合的拥有方。 AFAIK,有三种方法可以做到:

  1. 让儿童成为可嵌入的对象。请参阅Hibernate文档中的7.2.39.2
  2. Use @OneToMany with a @JoinColumn
  3. Use @OneToMany with a @JoinTable
  4. 您编码的方式曾经起作用,但即使文档的bug部分看起来仍然不正确 - 或者至少令人困惑 - 已经修复了23.1对我来说。