在我的搜索中找不到合适的答案。
我的父/子关系类似于:
@Entity
public class Parent {
@OneToOne(cascade=CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="child1_id")
private Child child1;
@OneToOne(cascade=CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="child2_id")
private Child child2;
@OneToOne(cascade=CascadeType.ALL,orphanRemoval=true)
@JoinColumn(name="child3_id")
private Child child3;
}
@Entity
public class Child {
@Pattern(regexp="FY\\d{4}", message="Format must be 'FYnnnn'")
private String startYear;
@Pattern(regexp="FY\\d{4}", message="Format must be 'FYnnnn'")
private String endYear;
}
以下是保存父实体的服务调用:
@Service
class ParentService {
@Autowired
private JpaRepository<T,Integer> repo;
@Transactional
public T add(T entity) throws Exception {
...
return repo.saveAndFlush(entity)
}
}
当我在child1中保存日期格式不正确的Parent对象时,会正确抛出ConstraintViolationException。在更正日期格式并再次调用add之后,我收到“Detached Entity”错误。通过调试器,我看到的是child2和/或child3的id字段是非零值。 Parent和child1的id正确为0.我假设非零ID字段是“Detached Entity”错误的原因。
我的问题是为什么在回滚后ID会不为零?我可以确认没有任何内容保存在数据库中的子表中。
版本: 春季4.1.0 Hibernate Entity Manager 4.3.6 Hibernate Validator 5.1.2 Hibernate JPA API 1.0.0 Spring Data Commons 1.9.0 Spring Data JPA 1.7.0
更新:
没想到我会成为遇到这个问题的唯一人。所以我通过捕获异常并强制孩子的ID回到0来解决了这个问题。看起来这似乎不对。也许这是一个错误?只需弄清楚它是否是Hibernate或Spring中的错误。