不确定“范围”是否是正确的术语。
我正在使用 Spring 进行 JPA 事务管理(下面有一个 Hibernate)。我执行数据库事务的方法是私有的,但是因为您只能在类或公共方法上设置 @Transactional
由于这种机制是基于代理的,只有通过代理传入的“外部”方法调用才会被拦截。这意味着“自调用”,即目标对象中的一个方法调用目标对象的其他方法,即使调用的方法标有@Transactional,也不会在运行时导致实际事务!
我已将类的公共入口点设置为@Transactional。
@Transactional
public void run(parameters) {
//First non-database method, takes a decent amount of time
Data data = getData();
//Call to database
storeData(data);
}
private storeData(data) {
em.persist(data);
}
这是不好的做法吗?Spring 是否保持开放事务的时间比这里需要的时间更长?我正在考虑将 storeData() 方法移至 DAO 类并将其公开,但作为学术观点,我想知道重构为 public 是否会对性能产生任何好处。