【发布时间】:2014-11-11 16:28:46
【问题描述】:
在编写多层应用程序时,最好只将对象 ID 传递给事务服务方法。但我宁愿传递实际的 JPA 对象。与问题Is domain model object passing between layers overhead? 不同,一些同事担心a) 对象可能属于另一个/无事务,如果在服务方法内部修改时会导致问题,并且b) 在从UI 调用此类服务方法后修改对象可能会导致问题组件,因为事务已经提交。
用我想要的代码表达
@Named public class MyServiceImpl
{
...
@Transactional
public BigDecimal calculate(ObjectOne objectOne, ObjectTwo objectTwo)
{
...
}
}
而不是
@Named public class MyServiceImpl
{
...
@Transactional
public BigDecimal calculate(long objectOneId, long objectTwoId)
{
ObjectOne objectOne = objectOneService.find(objectOneId);
ObjectTwo objectTwo = objectTwoService.find(objectTwoId);
...
}
}
那么有没有一种技术可以让事务管理器(spring)正确地处理对象?或者您是否建议使用 JPA 合并或其他任何明确的方法来正确处理直接对象引用?还是您也不鼓励传递对象而不是 ID?
显然,带有官方或知名来源链接的解释会很有帮助。
【问题讨论】:
标签: spring jpa transactions