草庐IT

Transactional

全部标签

Spring 数据 jpa @transactional

下面是我的申请流程Controller-服务-存储库在服务层我们有@Transactional注释我们还有jpa:repository配置,我们在其中指定实体管理器和txn管理器。我的怀疑是我觉得jpa:repositories中指定的txnmanager被考虑了,在服务层指定@Transactional没有影响。例如:服务层@Transactional可以映射到自定义txn管理器,因为服务调用的存储库可能有不同的txn管理器。那样会不会有问题?有人可以澄清一下,当我们使用jpa存储库时,我们是否需要将@Transactional放在服务层? 最佳答案

java - Spring,@Transactional 和 Hibernate 延迟加载

我正在使用spring+hibernate。我所有的HibernateDAO都直接使用sessionFactory。我有应用层->服务层->DAO层,所有集合都是延迟加载的。所以,问题是有时在应用程序层(包含GUI/swing)中,我使用服务层方法(包含@Transactional注释)加载实体,并且我想使用该对象的惰性属性,但是显然session已经关闭。解决这个问题的最佳方法是什么?编辑我尝试使用MethodInterceptor,我的想法是为我所有的实体写一个AroundAdvice并使用注释,例如://Customannotation,saythatsessionisrequi

java - 使用 spring @transactional hibernate session.flush

我在我的应用程序中使用Spring和Hibernate并使用SpringTransaction。所以我在方法上有一个带有注释@Transaction的服务层,而DAO层有用于数据库查询的方法。@Transactional(readOnly=false)publicvoidget(){}问题是当我想在数据库中保存一个对象时,我必须在DAO层方法的末尾使用session.flush()。为什么?我想如果我注释了@Transaction,那么Spring应该在服务方法完成时自动提交事务。DAO层:publicBaseEntitysaveEntity(BaseEntityentity)thro

java - Spring多个@Transactional数据源

在我的服务层中,如果我有多个事务管理器,我可以使用@Transactional(name="transactionManager2");来识别我使用哪个事务管理器吗? 最佳答案 您可以使用valueattribute指定与@Transactional一起使用的tx管理器。:Aqualifiervalueforthespecifiedtransaction.Maybeusedtodeterminethetargettransactionmanager,matchingthequalifiervalue(orthebeanname)of

Spring @Transactional 和 JDBC 自动提交

在我的实际应用程序中,我有一个未设置JDBCautoCommit=false的DBCP连接池。它似乎有默认的autoCommit=true。这可能是一个错误,但我想了解更改此参数的影响。我正在使用:-带有@Transactional注释的Spring-带有JDBC读取器和写入器的SpringBatch,最终使用JdbcTemplate自定义小任务我想知道Spring是否在当前连接上设置了autoCommit=false,如果它是在TransactionManager处理的事务的上下文中。它会覆盖默认设置吗?因为在我看来这样做是有道理的。 最佳答案

java - Spring @Transactional 继承规则

我有一组从抽象类继承核心功能的@Servicebean。我用@Service和@Transactional标记了每个具体的子类服务。抽象父类(superclass)包含每个服务的公共(public)入口点方法。换句话说,我有类似以下的内容:abstractclassAbstractService{publicvoidprocess(){//DocommoninitialisationcodehereprocessSpecific();//Docommoncompletioncodehere}abstractprotectedvoidprocessSpecific();}@Service

java - Hibernate Session 刷新行为 [和 Spring @Transactional]

我在网络应用中使用Spring和Hibernate,SessionFactory被注入(inject)到一个DAObean中,然后这个DAO通过webservicecontext在一个Servlet中使用。DAO方法是事务性的,在我使用的一种方法中...getCurrentSession().save(myObject);一个servlet调用此方法并传递一个对象。更新好像不是一下子刷新的,大概需要5秒才能看到数据库的变化。调用DAO的更新方法的servlet方法只需几分之一秒即可完成。DAO的@Transactional方法完成后,flush可能不会发生?这似乎不是一个规则[我已经看

java.lang.IllegalStateException : No transactional EntityManager available

项目使用Hibernate(JPA)、Spring和Maven。我的实体和DAO在一个单独的JAR中。pom.xml:...databaseorg.hibernatehibernate-entitymanager3.5.4-Final道:publicclassAbstractDAOimplementsGenericDAO{privatefinalClasspersistentClass;privateEntityManagerentityManager;publicAbstractDAO(ClassentityClass){super();this.persistentClass=en

java - 是否指定 @Transactional rollbackFor 还包括 RuntimeException

@Transactional(rollbackFor=MyCheckedException.class)publicvoidfoo(){thrownewRuntimeException();}这个事务会被回滚,还是我也需要在注解中包含RuntimeException.class? 最佳答案 不需要在rollbackFor列表中包含RuntimeException。即使您不提及它,它也会处理。我已经为jdbcTemplate尝试过:-@Transactional(propagation=Propagation.REQUIRED,rol

hibernate - 嵌套@Transactional

是否可以在spring中嵌套@Transactional注解的方法?考虑这样的事情:@Transactionalpublicvoida(){obj.b();}@Transactionalpublicvoidb(){//...}如果我在b()中回滚并在a()中回滚,在这种情况下会发生什么? 最佳答案 方法b()上的第二个@Transactional注释不是必需的,因为默认情况下@Transactional具有REQUIRED的传播,因此方法a()调用的方法将是事务性的。如果您希望在方法a()调用的方法中启动新事务,则需要修改传播规则。