问题标签 [spring-transactions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我是否需要用 try-catch 封装所有 saveOrUpdate 方法?
我是否总是需要使用如下所示的 try-catch 块将saveOrUpdate
或delete
放在DAO 中?Session
spring - 使用@Transactional 时出现“没有正在进行的事务”错误
所有,我正在尝试在 Spring 中使用注释事务并获取 javax.persistence.TransactionRequiredException: no transaction is in progress
一直出错。
错误堆栈跟踪:
请注意,当我使用 AOP 时,相同的代码运行良好。
技术栈如下所示:
这是我的应用程序配置:
应用程序上下文.xml
同样在 struts.xml 中,我调用 MyDAO 类的 saveOrUpdateData()。
web.xml
我的持久性.xml
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> org.hibernate.ejb.HibernatePersistence jdbc/my_dataSource1.1
使用@Transactional 的DAO 方法类如下所示:
//MyDAO 类
BaseDAO 类:
使用的库:
系统配置:
我启用了 parent_last 类加载,并在我的 Websphere 应用程序服务器中将默认 JPA 提供程序分配为“org.hibernate.ejb.HibernatePersistence”。
任何帮助表示赞赏。
谢谢
========================================
添加这个供大家使用...
我最终不得不使用基于 AOP 的事务管理。我找不到让@Transactional 在我的应用程序中工作的方法。
在我为 AOP 集成添加到我的应用程序的部分下方添加(在 applicationContext.xml 中):
希望这可以帮助,
java - 在提交之前查看 Oracle 会话中的所有 DML 更改
我正在为 Oracle (10g) 存储过程编写测试工具。我打算使用@Transactional
测试来运行存储过程,以便在测试结束时回滚事务。所以我的测试看起来像:
我可以断言已经进行了正确的更新,因为测试会话的本地更改将在测试方法中可见。
然而,为了做出更严格的断言,能够检查会话中已调用但尚未提交的 DML 语句的完整列表会很方便。有没有办法让我看到这个?
java - TransactionManager 和注释的 Spring 3 问题
我正在尝试TransactionManager
在我的 Web 应用程序(由 Spring MVC 3 提供支持)中设置一个,因为我需要将一个组件的方法注释为@Transactional
.
这是我的情况:
web.xml
ContextLoaderListener
: 为 Spring (applicationContext.xml
和database.xml
)加载 2 个 xml 文件- applicationContext.xml:包含一些我无法通过注释定义的bean,加上注释的标签,加上通常的 context:annotation-config 和 context:component-scan (这个组件扫描包括包含该
@Transactional
方法的包) database.xml
: 包含数据源(我BasicDataSource
从 commons-dbcp 使用)、事务管理器定义和 tx:annotation-driven。
我有一个@Component
(DeleteComponent
),它有一个接口和一个实现 ( DeleteComponentImpl
)。实现类被注释@Component
并有一个公共方法被注释@Transactional
(我注释了具体类而不是接口,如 Spring 文档所述)。因为@Transactional
我没有提出任何论据,因为默认值很好。这个类有一些@Repository
通过@Autowired
. 我只使用普通的 JDBC(没有 Hibernate 或其他 ORM)。这@Component
被注入到@Controller
(在 spring- 中定义servlet.xml
)中。
但是,如果注释为 as 的方法@Transactional
抛出异常(未选中, as RuntimeException
),则不会回滚任何内容。数据库保留异常之前所做的更改。我正在使用 Jetty Web 服务器在本地测试我的应用程序。我注意到的事情实际上似乎没有设置事务管理器。实际上,我的事务管理器名为transactionManager
. 设置注释驱动事务的 xml 行是
如果我将其更改为使用不存在的 bean 名称,例如
该应用程序仍然正确部署并且没有抱怨。
关于我应该检查什么以使其正常工作的任何提示?
谢谢。
java - 春天的 PROPAGATION_REQUIRED 事务属性?
在http://www.vermatech.com/code/SpringTransactionExamples.html给出的第一个案例研究中,程序调用了两种方法,即
其中 initializeCountries 抛出运行时异常。对于这两种方法的事务定义属性都是 PROPAGATION_REQUIRED。deleteAllCountries 方法下的事务仍然被提交,但 initializeCountries 下的事务被回滚(根据同一案例研究中给出的日志)。
根据 PROPAGATION_REQUIRED 的定义,它支持当前事务;如果不存在,则创建一个新的。所以我的问题是initializeCountries方法下的事务应该支持deleteAllCountries方法下的事务。我的意思是这两种方法都应该被视为单一交易。根据我的理解,应该提交还是回滚完整的事务?不知道日志是如何分开处理它们的。
java - 同步spring事务
我们在项目中使用 Spring 和 Hibernate,并具有分层架构。控制器 -> 服务 -> 管理器 -> 道。事务从 Manager 层开始。服务层中更新数据库中对象的方法被许多线程调用,这导致抛出一个过时的对象期望。所以我把这个方法同步了,仍然看到抛出过时的对象异常。我在这里做错了什么?有没有更好的方法来处理这种情况?
我在这里先向您的帮助表示感谢。
hibernate - 带有 AspectJ 问题的 Spring Annotation 驱动程序事务
我正在使用 AspectJ 编译时编织和 spring 3.O。和 Hibernate 3.0...AspectJ 编织对于简单的事情(例如日志记录)工作正常,但这对于事务不能正常工作
lib forlder 中也存在 Sprong-aspects jar,但事务支持仍然不起作用。
我正在这样使用
日志记录没有指定任何事务..事务在 spring aop 中运行良好,但在 spring 容器中未定义类时不能使用 aspectj
java - Spring 中的声明式事务管理行为不可预测
我有一个带有声明式事务管理的 Spring+Hibernate 应用程序。我有一个服务 ( FooService
),它有 2 个公共方法MethodA
和MethodB
. call
客户端将MethodA
依次调用MethodB
.
我希望事务仅从 MethodB 开始。这是我的 spring 应用程序上下文的一个片段:
但是,当我MethodA
从客户端调用时,它不会创建事务代理何时MethodB
被调用。如果我MethodA
还添加到应用程序上下文中的 bean 配置,则会调用事务代理(MethodA
如预期的那样开始)。为什么会这样?我可以实现仅从 MethodB 开始创建的事务吗?
hibernate - org.hibernate.HibernateException:没有活动事务,加载无效
加载用户数据时出现以下错误。
我正在使用 AspectJ 编译时编织和 spring 3.O。和休眠 3.0
下面是我的代码和配置文件。
配置:
提前致谢
java - Spring事务回滚
这两天我一直在尝试解决这个问题,但没有成功。我在 Spring 3.0.5 和 Postgress 中使用注释驱动的事务。我正在从业务逻辑方法中调用两个 dao 方法:
第二种方法 (addGoogleTransaction) 在最后抛出一个 RuntimeException,但是事务没有回滚并且插入了两行。
DAO 方法如下所示:
弹簧配置文件:
我需要配置其他东西吗?我试图将@Transactional 添加到业务逻辑类并将@Transactional 添加到dao 方法,但它也不起作用。谢谢
它是从控制器类(用@Controller 注释)中调用的,用于测试目的。