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
Java 在EJB3.0中声明事务_Java_Jpa_Jakarta Ee_Persistence_Ejb 3.0 - Fatal编程技术网

Java 在EJB3.0中声明事务

Java 在EJB3.0中声明事务,java,jpa,jakarta-ee,persistence,ejb-3.0,Java,Jpa,Jakarta Ee,Persistence,Ejb 3.0,我想做一个事务,如何强制EJB在每个命令之后不刷新所有内容。我读到这是以某种方式声明的。但具体如何? 您好,我如何强制EJB在每个命令之后不刷新所有内容,我想做一个事务 首先,你不应该在每一个命令后都得到刷新,我真的很惊讶你在持久化后得到刷新。你在显示所有的代码吗?其次,EJB方法在默认情况下是事务处理的。但是事务和刷新并不是真正相关的,唯一的联系是刷新将在提交之前完成。无论如何 如果要控制刷新调用的执行方式,可以使用EntityManagersetFlushMode更改默认刷新模式。冲洗模式

我想做一个事务,如何强制EJB在每个命令之后不刷新所有内容。我读到这是以某种方式声明的。但具体如何?

您好,我如何强制EJB在每个命令之后不刷新所有内容,我想做一个事务

首先,你不应该在每一个命令后都得到刷新,我真的很惊讶你在持久化后得到刷新。你在显示所有的代码吗?其次,EJB方法在默认情况下是事务处理的。但是事务和刷新并不是真正相关的,唯一的联系是刷新将在提交之前完成。无论如何

如果要控制刷新调用的执行方式,可以使用EntityManagersetFlushMode更改默认刷新模式。冲洗模式如下所示:

提交-刷新仅在事务提交时或调用刷新时发生。 自动默认刷新发生在任何查询执行之前。 因此,类似的方法应该有效:

@Stateless
public class SomeBean {
    ...
    public void doSomeStuffAndThenFlushToTheDb(){
        em.setFlushMode(COMMIT);
        em.persist(entity);
        em.persist(somethingElse);
        em.flush(); // Causes flush
    }
    ...
}
但正如我所说,我对你的例子感到惊讶。你描述的行为不是我所期望的

您好,我如何强制EJB在每个命令之后不刷新所有内容,我想做一个事务

首先,你不应该在每一个命令后都得到刷新,我真的很惊讶你在持久化后得到刷新。你在显示所有的代码吗?其次,EJB方法在默认情况下是事务处理的。但是事务和刷新并不是真正相关的,唯一的联系是刷新将在提交之前完成。无论如何

如果要控制刷新调用的执行方式,可以使用EntityManagersetFlushMode更改默认刷新模式。冲洗模式如下所示:

提交-刷新仅在事务提交时或调用刷新时发生。 自动默认刷新发生在任何查询执行之前。 因此,类似的方法应该有效:

@Stateless
public class SomeBean {
    ...
    public void doSomeStuffAndThenFlushToTheDb(){
        em.setFlushMode(COMMIT);
        em.persist(entity);
        em.persist(somethingElse);
        em.flush(); // Causes flush
    }
    ...
}

但正如我所说,我对你的例子感到惊讶。您描述的行为不是我所期望的。

首先,flush意味着只将其存储在二级缓存db驱动程序中。它不直接存储在数据库中。自事务完成并发送提交后,实体将保留在缓存中。清除意味着分离实体。这并不意味着清除数据库。所以以后你就不能再坚持这个实体了。但持久化仍将在事务结束时完成。

首先,刷新意味着仅将其存储在二级缓存db驱动程序中。它不直接存储在数据库中。自事务完成并发送提交后,实体将保留在缓存中。清除意味着分离实体。这并不意味着清除数据库。所以以后你就不能再坚持这个实体了。但持久化仍将在事务结束时完成。

em.setFlushModeFlushModeType.COMMIT;em.持续匹配;em.clear;em.flush,在这个简明的示例中,我希望数据库中不会保存任何内容,但oposite是事实,为什么?当我用em.clear?@coubeatcheck清除所有内容时,这是一个完全不同的问题,不容易在评论框中讨论。请打开另一个问题并提及您的JPA提供商,但您的用例确实很奇怪;em.持续匹配;em.clear;em.flush,在这个简明的示例中,我希望数据库中不会保存任何内容,但oposite是事实,为什么?当我用em.clear?@coubeatcheck清除所有内容时,这是一个完全不同的问题,不容易在评论框中讨论。请打开另一个问题并提及您的JPA提供商,但您的用例真的很奇怪。哪个db?如果您的数据库不支持事务,则可能会出现奇怪的结果,例如mysql中的myisam如果要回滚当前事务,请使用@Resource SessionContext将SessionContext注入bean,并调用context.setRollbackOnly回滚。哪个数据库?如果您的数据库不支持事务,则可能会出现奇怪的结果,例如mysql中的myisam如果要回滚当前事务,使用@Resource SessionContext上下文将SessionContext注入bean并调用context.setRollbackOnly进行回滚。实际上,flush的文档说明:将持久性上下文同步到基础数据库。但是,flush并不会导致flush的文档声明:将持久性上下文同步到底层数据库。但是,刷新不会导致提交