问题标签 [transactional]
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.
spring - Spring @Transactional 未创建所需的事务
好的,所以我终于屈服于同伴压力并开始在我的网络应用程序中使用 Spring :-)...
所以我试图让事务处理的东西工作,但我似乎无法得到它。
我的 Spring 配置如下所示:
持久性.xml:
保存我的域对象的 DAO 方法如下所示:
所以我尝试在我的测试用例中使用以下代码保存我的 Group 对象的副本:
这个炸弹有以下例外:
此外,当 Spring 首次启动时,我收到以下警告。由于这些引用了 entityManagerFactory 和 transactionManager,它们可能与问题有关,但我无法破译它们以知道是什么:
有谁知道我错过了什么?我完全被难住了...
谢谢
ruby-on-rails - Rails 测试数据库不保留记录更改
几个星期以来,我一直在尝试解决一个问题。我正在为我的 Rails 应用程序运行 rspec 测试,它们工作正常,除了一个我似乎无法理解的错误。
- 我正在使用带有 InnoDB 引擎的 MySQL。
- 我已经
config.use_transactional_fixtures = true
在 spec_helper.rb中设置了 - 我使用命令手动加载我的测试装置
rake spec:db:fixtures:load
。 - rspec 测试是为 BackgrounDRb 工作人员编写的,它正在测试记录是否可以更新其状态(通过 state_machine gem)。
这是我的问题:
我有一个模型叫Listings
. rspec 测试调用update_sold_items
名为listing_worker.rb
. 此方法调用listing.sell
特定记录,它将列表记录的“状态”列设置为“已售出”。到目前为止,一切正常,但是当update_sold_items
方法完成时,我的 rspec 测试在这里失败:
我一直在试图追查为什么状态变化没有持续存在,但我几乎迷失了。以下是我在update_sold_items
测试期间放置在方法中的一些调试代码的结果:
我不明白为什么它保存得很好,但是每当我打电话时都会恢复到原始记录reload
,Listing.find
等等。
感谢您阅读本文,如果我没有提供足够的信息,请提出任何问题。
感谢您的帮助,内森 B
PS我为其他类创建新记录并测试这些记录没有问题。当我更新数据库中已经存在的记录时,这似乎只是一个问题。
hibernate - 在 groovy 中使用事务注释时遇到问题
有没有人有过在 Groovy 类中没有开始使用 Spring 事务(类级别、代理、注释驱动)的经验?我一直在与一个无法解释的 LazyInitialization 异常作斗争,注意到堆栈跟踪不包括启动事务的调用。听起来很疯狂,但我不得不怀疑 Groovy 是否接受了 Transactional 注释。
ruby-on-rails - Rails - 从 before_create 返回 false 防止更改其他模型
我有一个before_create
过滤器来检查人们是否发布了太多评论。
如果他们是,我想标记他们的帐户。
before 过滤器返回 false 以停止创建评论。问题是这会触发 ROLLBACK,它也会撤消我对用户模型所做的更改。
完成此操作的正确模式是什么?具体来说:每次创建对象时运行检查,如果检查失败,则能够编辑另一个模型。
spring - junit 测试用例事务未提交 - 没有错误
我们在我们的应用程序中实现了 JUnit4,它使用 Spring 核心和 JPA 和 DB2。我们需要测试从一个数据库检索数据并合并到另一个数据库的完整功能。
编写了用于从第一个数据库中检索数据的测试用例,并且它运行良好,没有任何错误,但记录没有存储到第二个数据库中。
执行
我们在 TestCase 类中包含了以下注释,以使测试用例在必要时在事务下运行,
在应用程序中,我们有一个管理器类来使用 doSynch() 方法执行此操作。从该方法 crudHelper 类的 txStore() 方法将被调用以初始化并调用 doStore() 方法(在同一类中)以将实体合并到数据库。
以下是贯穿此测试用例逻辑的事务性声明
doSynch() 被标记为 NEVER,因为此时它不需要任何事务,并且在 CRUDHelper 等其他级别中,事务可以标记为 REQUIRED 以确保事务可用。
问题
在这里,当我们运行调用 Manager 的 doSynch() 方法来测试功能的测试用例时,除了没有合并记录并且没有抛出错误之外,完整的流程运行良好。
从 JSP 调用 Manager 方法时效果很好。我们还通过直接从测试用例调用 txStore() 进行了测试,它也可以正常工作。
请让我们知道事务管理是否不正确,或者解决此问题会有更大的帮助。如果问题或环境不清楚,也请更新我。提前致谢。!!
java - 如何扩展 Spring 注解 @Transactional
我必须在我的 web 应用程序中使用 3 个不同的事务管理器。所以我根据Spring参考(第10.5.6.3节自定义快捷方式注释)编写了自己的Annotation。
一个注释(用于使用一个特定的事务管理器)如下所示:
使用自定义的 @CustomerTX 注释注释我的服务层时,一切正常。但是我必须为我的注解提供更多的选项,比如 readonly=true、rollbackFor= 等等。由于您不能“扩展”注释(我真的只需要从 Spring 扩展 @Transactional 注释),因此正确的实现是什么?
hibernate - postgresql 上的事务未提交,映射对象未通过 autoCommit=false 持久化
在正在运行的事务中调用 persist 时,映射的对象不会被持久化在 DB (Postgresql 8.4) 中。我正在使用 Spring 事务管理
org.springframework.jdbc.datasource.DataSourceTransactionManager
所以一切都应该没问题。我将 DataSource 上的自动提交模式设置为“false”。当将模式设置为“true”时,将完成提交(并且对象被持久化),但这会导致更大的问题(例如从数据库中获取 blob)。所以我必须将自动提交模式设置为“false”,这也是大家告诉我的首选模式......
这是我的持久性配置(我将代码简化为必要的东西):
我还应该提到我正在使用 3 个不同的事务管理器(当然还有 3 个不同的数据源)......
我自己的事务注释将由上面提到的限定符属性反映:
“应该”保留对象的带注释的服务类......
这是调用调用数据库调用的服务方法时的日志:
如您所见,事务正在提交(根据日志),但没有对象被持久保存在 db 中(尽管正在执行插入和更新)。
在我的数据源配置中将提交模式设置为
属性名称="defaultAutoCommit" 值="true"
一切正常!
我真的不知道是什么导致了这个奇怪的问题......如果有人能给我一个提示,我会很高兴。
spring - 使用 Spring 2.5 从外部事务控制内部事务设置
我正在使用 Spring 2.5 事务管理,并且我有以下设置:
豆1
豆2
故障永远不会从 Bean1 持久化到 DB 中,因为整个事务都回滚了。
我不想在 Bean2 中添加noRollbackFor,因为它用于很多没有逻辑来正确处理运行时异常的地方。
有没有办法避免我的事务仅在从 Bean1 调用 Bean2.execute() 时回滚?
否则,我想我最好的选择是在新交易中坚持我的失败?还有什么我可以做的干净的吗?
java - 是否可以测试流程的事务性?
我希望能够验证每个工作单元是在其自己的事务中完成,还是作为单个全局事务的一部分。
我有一个方法(使用spring和hibernate定义),其形式为:
这是从两个地方调用的,用户登录时的网站和每天运行的批处理作业。对于 Web 服务器上下文,它将使用 Web 服务器创建的事务运行。对于批处理作业,它必须为每个用户有一个事务,以便如果在此方法期间发生故障,事务将回滚。所以我们有两种方法:
从批处理作业调用 updateUserCreateNewTransaction(),从 Web 服务器上下文调用 updateUserWithExistingTransaction()。
这行得通。但是,不改变(批次的)这种行为是非常重要的,所以我希望创建一个测试来测试这种行为。如果可能的话,我想在不更改代码的情况下这样做。
所以对我开放的一些选择是:
计算批处理作业运行期间在数据库中打开的事务。
在 updateSomethingElse() 方法中以某种微妙的方式更改数据,以便至少有一个用户更新失败,并检查该用户的 updateSomething() 是否没有发生。
代码审查。
1是一个非常依赖数据库的方法,我如何保证hibernate无论如何都不会创建事务?2似乎更好,但设置起来非常复杂。3 并不是很实用,因为我们需要为每个版本都做一个。
那么,有没有人有一种方法可以让我测试这段代码,最好是通过系统测试或集成测试?
java - spring 和@transactional,这正常吗?
我写了这个简单的例子:
这是我的尝试:
现在奇怪的行为(我对春天很陌生):
- 如果我声明
@Transactional
方法“useController()”,输出为:true true - 如果我
@Transactional
从移动TestService
到TestControllerImp
,并且我用 声明“findAll()”@Transactional
,则输出为:false false。
为什么我有这种行为?我知道默认@Autowired
类是单音的,但为什么在第一种情况下标志仍然是真的?
谢谢大家。