2

如果我有方法

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调用自己的拦截方法时,拦截器并没有被触发。我认为那是因为它不是被调用的代理,而是“真实实例”本身,因此它不会通过代理。

这是否包含在规范/文档中?我还没找到。我问是因为我想确保如果我注释所有公共方法,它们将来不会开始多次调用拦截器。

4

2 回答 2

1

第二个“内部”调用不再通过上下文引用,因此不会被拦截。

于 2011-08-09T14:22:30.423 回答
1

我不记得在规范中看到过它,但这就是代理的工作方式。但无论如何,这与事务传播有关 - 使用现有正在运行的事务调用事务方法是否应该启动新事务。

获取Seam 3 持久性模块(带有事务支持)

于 2011-08-07T15:07:46.773 回答