Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的无状态会话要求容器事务?_Java_Hibernate_Ejb - Fatal编程技术网

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自己的无状态会话教程提到开始和提交事务?