如果我有方法
public List<IrcEvent> getEventsByCriteria(IrcEventCriteria crit, boolean descending) {
return getEventsByCriteria(crit, 0, Integer.MAX_VALUE, descending);
}
@JpaTransactional
public List<IrcEvent> getEventsByCriteria(IrcEventCriteria crit, int first, int count, boolean descending) {
...
}
然后第一个方法也必须注释@JpaTransactional吧?
我刚刚发现当bean调用自己的拦截方法时,拦截器不会被触发。 我认为那是因为它不是被调用的代理,而是“真实实例”本身,因此它不会通过代理。
这是否包含在spec / docs中?我还没找到。 我问,因为我想确定如果我注释所有公共方法,他们将来不会多次开始调用拦截器。
答案 0 :(得分:1)
我不记得在规范中看到它,但这是代理工作的方式。但无论如何,这与事务传播有关 - 无论是否使用现有正在运行的事务调用事务方法都应该启动新事务。
获取Seam 3 persistence模块(具有事务支持)
答案 1 :(得分:1)
第二次“内部”调用不再通过上下文引用,因此不会被截获。