我想保存的实体是父母和孩子。当我保存实体(即同时保存的父节点和子节点)时,无论正常执行(每次调试模式),我都会在会话刷新期间抛出HibernateOptimisticLockingFailureException。测试是在我的本地机器上,单线程,没有人正在更改实体,因为我也在保存它。
我们正在使用以下内容:
关键点:
Hibernate代码
getHibernateTemplate().saveOrUpdate(parentEntity);
// a break point here and wait for 1 sec before executing
// always get the HibernateOptimisticLockingFailureException
getHibernateTemplate().flush();
父映射
@Access(AccessType.FIELD)
@OneToMany(mappedBy="servicePoint", fetch=FetchType.EAGER, cascade={CascadeType.ALL}, orphanRemoval=true, targetEntity=ServicingMeter.class)
private List<ServicingMeter> meters = new ArrayList<ServicingMeter>();
儿童制图
@Access(AccessType.FIELD)
@ManyToOne(fetch=FetchType.EAGER, targetEntity=ServicePoint.class)
@JoinColumn(name="service_point_id", nullable=false)
private ServicePoint servicePoint;
问题:
1.为什么父表上有更新日期?
2.如何避免此更新发生?
3.我的一对多映射的设置方式有问题吗?
带注释的日志文件可以是found here