草庐IT

TRANSACTIONS

全部标签

java - @Transactional 是做什么的?

这个问题在这里已经有了答案:Spring-@Transactional-Whathappensinbackground?(6个答案)关闭3年前。我知道这可能是重复的,具有讽刺意味的是,在我开始到处阅读之前,我以为我知道它的用途(不用说但我还是要说,不对的地方请指正):它使程序员不必使用transaction.begin()和commit()。如果您有一个调用两个DAO方法的方法,这两个DAO方法通常每个都有包含实际操作的transaction.begin和transaction.commit并调用它们,这将导致两个事务(如果以前的DAO方法也应该回滚,则可能会出现回滚问题)。但是如果您

java - 如何在 Hibernate 4.3.4.Final 中配置和获取 session ?

我最近将我的Hibernate版本升级到了4.3.4.Final。BasedonContextualSessionsconfigurationofHibernatethisnewversionisnotbasedonThreadLocalanymore.如果到目前为止我得到的是正确的,我需要做些什么来提高效率吗?如果不正确我该怎么办?我不知道。请注意文档中提到:Hibernate提供三种当前session跟踪方法。基于“线程”的方法不适用于生产用途;它仅对原型(prototype)设计和教程有用,例如本教程。Hibernate.cfg.xmlcom.mysql.jdbc.Driverj

java - 使用 JPA 的事务边界和 DTO 转换

一直在想这个异常应该怎么处理:DTO应该在Controller中转换,服务层不需要知道它们。事务边界由服务层定义。但是您如何避免JPALazyInitialization异常呢?DTO转换可能需要LazyFetched数据,但由于事务是由服务层处理的,因此无法做到。我能想到的方法有很多,但都很难看。将DTO转换放在服务层现在对我来说似乎是最好的。 最佳答案 是的,在服务层操作DTO肯定更好。当使用DTO中包含的更改更新实体时尤其如此,否则您将需要获取和更新分离的实体,将它们传递给服务,将它们再次合并到持久性上下文中,等等。“DTO应

java - 如何防止 "Local transaction already has 1 non-XA Resource"异常?

我在无状态EJB中使用了2个PU,它们中的每一个都在一个方法上被调用:@PersistenceContext(unitName="PU")privateEntityManagerem;@PersistenceContext(unitName="PU2")privateEntityManagerem2;@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)publicvoidgetCandidates(finalIntegereventId)throwsControllerException{ElectionEventel

java - Spring @Transactional注解: Self Invocation

我知道当从同一个类内部调用事务方法时,它不会在事务中运行。Spring为事务方法创建代理并将它们包装在try-catchblock中,并在发生异常时回滚。考虑以下场景:@TransactionalpublicvoidsaveAB(Aa,Bb){saveA(a);saveB(b);}@TransactionalpublicvoidsaveA(Aa){dao.saveA(a);}@TransactionalpublicvoidsaveB(Bb){dao.saveB(b);}假设saveAB被另一个对象调用并且在saveB中发生异常,所以saveA成功完成但saveB没有。据我所知,即使sa

java - (N)Hibernate "session-per-application"被认为是特定用例的邪恶?

好的,每个人都知道不鼓励使用(N)Hibernate的全局session每个应用程序。但是我有一个非常具体的、显然是非标准的用例,它似乎是理想的解决方案。总而言之,我的(服务器)应用程序的所有持久数据基本上都在内存中,并且从不查询数据库以进行正常操作。首先使用数据库的唯一原因是数据在进程的生命周期内存活。我只想在应用程序启动时查询数据库以将所有内容提取到内存中。实际上,该数据库只有大约5-10MB。现在的问题是,如果我遵循session必须是短暂的建议,我必须为每个业务交易合并()我的所有数据,或者以某种方式手动跟踪所有更改,而不是利用NHibernate的自动更改跟踪。这使得持久性很

java - 是否可以使 oracle 数据库程序忽略提交语句?

我正在开发与遗留系统集成的Java应用程序,该系统编写为OraclePL/SQL。不幸的是我无法改变这个遗留系统。该系统的问题在于,有时COMMIT语句会写入过程。但这导致我无法在我的应用程序级别正确处理事务。那么是否可以让oracle数据库程序忽略commit语句呢?我发现在连接开始时执行ALTERSESSIONDISABLECOMMITINPROCEDURE会在PL/SQL过程尝试提交时导致异常。但是是否可以让Oracle在不更改PL/SQL代码的情况下忽略提交? 最佳答案 我认为你做不到。您必须向这些过程添加一个参数,如默认值

java - 调用 entityManager.getTransaction() 时出现 EJBException

这可能是一件微不足道的事情,但我希望得到一些帮助。我得到:javax.ejb.EJBException:java.lang.IllegalStateException:Illegaltocallthismethodfrominjected,managedEntityManager11:54:37,105ERROR[STDERR]atorg.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)11:54:37,105ERROR[STDERR]atorg.jboss.aspects.tx.TxPoli

java - 事务的传播行为

我正在为springaop使用基于注释的声明方法。示例代码ClassA{@Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)add(){method1();method2();method3();}}但是我对propagation的使用还是存疑,是否propagation.Requires_New表示每次请求都会开启新的transaction第二个问题:method2,method3等方法失败会导致事务回滚吗?如果有什么可以帮助我学习交易传播,我将非常高兴。有人能给我一个我们需要参与现有交易的真实世界的例

java - 如何避免在服务类中重复 DAO 方法? @Transactional 注释 DAO 和服务类 - 这是可以接受的做法吗?

我知道最佳实践是同时拥有服务层和Dao层,并在服务层添加@Transactional注解。但在我的例子中,这意味着我的大部分服务类都是为了重复DAO方法而创建的……这很烦人。例如。publicinterfaceFooDAO{publicListlist(intcathegoryId);publicListlist(intcathegoryId,intownerId);}@Service@TransactionalpublicclassFooService{protected@AutowiredFooDAOdao;publicListlist(intcathegoryId){dao.li