我在spring数据中使用@version
注释,所以我有一个父实体,它有一个子实体列表。当我从子列表中删除元素时,父版本不会增加。任何人都可以为我澄清这个@version
替代方案,
为什么这种情况下的精通不会增加,这是管理版本控制的好方法,还是应该使用trasaction" lock"。
在文档中,我读到版本仅在更新行时更新 在数据库中,但在我的情况下,我把版本放在父实体上,我想要
注意:我在互联网上搜索了很多但我没有找到明确的解决方案,任何人都可以帮助我。
答案 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;父实体的更改,因为这只会导致额外的开销和更新父语句。