2 回答
TA贡献1842条经验 获得超21个赞
对我来说,这看起来像是货物崇拜编程。如果需要(有时是不需要的),的实现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()
功能,那么您可能需要具有更新保护的真实事务,在这种情况下,我会在存储库层上执行一些自定义代码。希望你不需要它。
添加回答
举报