我正在使用Spring(3.11)數據/存儲庫和JPA(2.0)/ Hibernate(3.5.6)一起使用,並且我有一個與CrudRepository的保存方法有關的問題。CrudRepository的保存方法返回一個bean,即使它沒有被創建
全球服務,我有如下:
@Override
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public MyBean createMyBean(MyBean myBean) {
// 1)
// myBean does not have PK, it will be generated via sequence
MyBean myBean = myBeanRepository.save(myBean);
// 2)
// sends event to queue
syncEventProducer.sendSyncEvent(....);
return myBean;
}
我的問題很簡單:我故意將一定爲myBean不滿足表的要求(一般爲我設置爲空列其中在數據庫中被創建爲非空),那麼在調用1)內部會產生一個異常(例如DataIntegrityViolationException),但仍然會執行2)。這是爲什麼?
MyBeanRepository是這樣的:
public interface MyBeanRepository extends CrudRepository<MyBean, Integer> {
}
挖在我見過的代碼一點點是關係到我的倉庫的SimpleJpaRepository確實返回我的一個新的PK豆儘管這不應該發生。
當然,最後整個事務會回滾,但我仍然不明白爲什麼myBeanRepository.save(myBean)「吞下」異常並返回一個帶有新PK的新bean。
感謝,
哈維
謝謝,它現在使所有的感覺 –
是的,你能標記答案是正確的嗎?謝謝。 –