Spring ConstraintViolationException之后子实体ID不是0

Spring ConstraintViolationException之后子实体ID不是0,spring,hibernate,jpa,spring-data,Spring,Hibernate,Jpa,Spring Data,在我的搜索中找不到合适的答案 我的父母/子女关系类似于: @Entity public class Parent { @OneToOne(cascade=CascadeType.ALL,orphanRemoval=true) @JoinColumn(name="child1_id") private Child child1; @OneToOne(cascade=CascadeType.ALL,orphanRemoval=true) @JoinColum

在我的搜索中找不到合适的答案

我的父母/子女关系类似于:

@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)
    }
}
@服务
班级家长服务{
@自动连线
私人回购;
@交易的
公共T添加(T实体)引发异常{
...
返回回购保存冲销(实体)
}
}
在child1中保存日期格式不正确的父对象时,将正确引发ConstraintViolationException。在更正日期格式并再次调用add之后,我得到了一个“Detached Entity”错误。在调试程序中,我看到child2和/或child3的id字段是非零值。父项和子项1的id正确地为0。我假设非零ID字段是“分离实体”错误的原因

我的问题是,为什么回滚后ID会不为零?我可以确认数据库中的子表中没有保存任何内容

版本: Spring 4.1.0 Hibernate实体管理器4.3.6 Hibernate验证程序5.1.2 HibernateJPAAPI 1.0.0 SpringDataCommons 1.9.0 Spring数据JPA1.7.0


更新:


没想到我会是唯一遇到这个问题的人。因此,我通过捕获异常并强制子项的ID返回到0,解决了这个问题。似乎这是不对的。也许这是一只虫子?只需找出它是Hibernate还是Spring中的错误。

在再次刷新之前是否尝试合并分离的实体?我使用的是Spring数据,因此无需手动执行合并。此外,问题不在于分离的实体。如果子项中的ID回滚到0,则不会出现分离实体错误。