2 回答

TA貢獻1842條經驗 獲得超22個贊
對我來說,這看起來像是貨物崇拜編程。如果需要(有時是不需要的),的實現save()已經進行了合并:
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
*/
@Transactional
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}

TA貢獻1876條經驗 獲得超5個贊
對我來說,這看起來是一個非常危險的代碼,意圖有點模糊和一些過度設計:
您是否 100% 保證在您的層和存儲庫之間共享同一個事務管理器?如果沒有,你就有麻煩了。
你只是在做雙重工作(@Jens 回答表明了這一點)。
@Transactional
這里只會讓事情變得更糟(如果你有一些非標準的沖洗政策)。尤其要注意,如果您從同一個類中調用方法,它將無法工作,因為它通過代理工作。如果你真的打算
insert()
(新記錄)你為什么需要merge()
?
我的投票是 - 就像save()
@Jens 指出的那樣使用。如果您確實需要insert()
功能,那么您可能需要具有更新保護的真實事務,在這種情況下,我會在存儲庫層上執行一些自定義代碼。希望你不需要它。
添加回答
舉報