Java 在EJB3.0中声明事务
我想做一个事务,如何强制EJB在每个命令之后不刷新所有内容。我读到这是以某种方式声明的。但具体如何? 您好,我如何强制EJB在每个命令之后不刷新所有内容,我想做一个事务 首先,你不应该在每一个命令后都得到刷新,我真的很惊讶你在持久化后得到刷新。你在显示所有的代码吗?其次,EJB方法在默认情况下是事务处理的。但是事务和刷新并不是真正相关的,唯一的联系是刷新将在提交之前完成。无论如何 如果要控制刷新调用的执行方式,可以使用EntityManagersetFlushMode更改默认刷新模式。冲洗模式如下所示: 提交-刷新仅在事务提交时或调用刷新时发生。 自动默认刷新发生在任何查询执行之前。 因此,类似的方法应该有效:Java 在EJB3.0中声明事务,java,jpa,jakarta-ee,persistence,ejb-3.0,Java,Jpa,Jakarta Ee,Persistence,Ejb 3.0,我想做一个事务,如何强制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的文档声明:将持久性上下文同步到底层数据库。但是,刷新不会导致提交