Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jakarta ee CDI事务管理:@Transactional是如何工作的?_Jakarta Ee_Jpa_Transactions_Ejb_Cdi - Fatal编程技术网

Jakarta ee CDI事务管理:@Transactional是如何工作的?

Jakarta ee CDI事务管理:@Transactional是如何工作的?,jakarta-ee,jpa,transactions,ejb,cdi,Jakarta Ee,Jpa,Transactions,Ejb,Cdi,在会话作用域中插入实体管理器的简单CDI bean: @Named("myBean") @SessionScoped public class MyBean implements Serializable { private static final long serialVersionUID = 1L; @Inject EntityManager em; ... @Transactional private void testInsert()

在会话作用域中插入实体管理器的简单CDI bean:

@Named("myBean")
@SessionScoped
public class MyBean implements Serializable {
    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager em;
   ...

    @Transactional
    private void testInsert() {
        long t = System.currentTimeMillis();

        for (int i=1; i<50000; i++) {  
            create(i);
        }
       System.out.println("Time: " + Long.toString(System.currentTimeMillis()-t));
    }

    private void create(int i) {
        Project p = new Project("Project " + i);
        em.persist(p);
    }
}
@Named(“myBean”)
@会议范围
公共类MyBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
@注入
实体管理器;
...
@交易的
私有无效测试集(){
long t=System.currentTimeMillis();

for(int i=1;i
@javax.transaction.Transactional
是Java EE 7中引入的拦截器绑定。CDI为您的bean注入的代理将拦截带注释的方法调用,以将它们包装在事务中


拦截器不适用于私有方法-我想这是您的示例的主要问题。

这里只是一个次要问题。是否有一种特殊的方法来拦截容器管理的所有事务?对于我的应用程序,我需要在每个事务的开始处注入自定义SQL查询。我找不到任何与此相关的文档这是我的问候。