当我们在spring数据中删除或添加子实体时,数据版本是否会增加?

时间:2018-06-18 13:04:03

标签: spring hibernate spring-boot spring-data-jpa

我在spring数据中使用@version注释,所以我有一个父实体,它有一个子实体列表。当我从子列表中删除元素时,父版本不会增加。任何人都可以为我澄清这个@version替代方案,

为什么这种情况下的精通不会增加,这是管理版本控制的好方法,还是应该使用trasaction" lock"。

在文档中,我读到版本仅在更新行时更新 在数据库中,但在我的情况下,我把版本放在父实体上,我想要

注意:我在互联网上搜索了很多但我没有找到明确的解决方案,任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

我假设你正在使用Hibernate。让我们说" UnderlyingPerTradingAccount" table有一个名为" trading_account_id"的列,它是TradingAccount表的外键。为了实现您描述的行为,您需要更改映射。你能试试这个:

public class TradingAccount {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
  @JoinColumn(name="trading_account_id", referencedColumnName = "trading_account_id", insertable = false, updatable = false)
  private List<UnderlyingPerTradingAccount> underlyingPerTradingAccounts;

  @Version
  private Long version;
}

public class UnderlyingPerTradingAccount {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @ManyToOne
  @JoinColumn(name="trading_account_id", nullable = false)
  private TradingAccount tradingAccount;
  private Boolean enableBuy;
  private Boolean enableSell;
}

这应该将父实体标记为&#34;脏&#34;当子实体更新并触发版本增量时。

但是,我会考虑一些其他方法来跟踪&#34;版本&#34;父实体的更改,因为这只会导致额外的开销和更新父语句。