在ConstraintViolationException之后,子实体ID不为0

时间:2015-10-21 13:31:20

标签: 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)
    @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中的错误。

0 个答案:

没有答案