Java 为什么我的无状态会话要求容器事务?
我有一个可运行的任务如下Java 为什么我的无状态会话要求容器事务?,java,hibernate,ejb,Java,Hibernate,Ejb,我有一个可运行的任务如下 @TransactionManagement(TransactionManagementType.BEAN) @TransactionAttribute(TransactionAttributeType.NEVER) public class Task implements Runnable { private SessionFactory sessionFactory; public Task(SessionFactory sessionFacto
@TransactionManagement(TransactionManagementType.BEAN)
@TransactionAttribute(TransactionAttributeType.NEVER)
public class Task implements Runnable {
private SessionFactory sessionFactory;
public Task(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void run() {
StatelessSession session = sessionFactory.openStatelessSession();
session.beginTransaction();
// ... the rest is irelevant because beginTransaction launches an exception
SessionFactory由一个bean提供,但当我尝试开始事务时,即使很困难,我也将该类标记为TransactionAttributeType.NEVER,hibernate会启动异常
org.hibernate.TransactionException: Could not register synchronization for container transaction
我试过了,但我只遇到了另一个问题
org.hibernate.TransactionException: Could not find UserTransaction in JNDI [java:comp/UserTransaction]
无状态会话不需要事务,请删除事务语句并重试。你可以读更多 无状态会话不实现一级缓存,也不实现 与任何二级缓存交互,也不会实现 事务性写后或自动脏检查,也不 操作级联到关联实例
但这就提出了一个问题:我的会话是否在每次插入实体时都打开一个事务?为什么Hibernate自己的无状态会话教程提到开始和提交事务?