问题标签 [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.

0 投票
2 回答
433 浏览

spring - 如何测试 JPA 实体插入是否完成?

  1. 问题是关于如何测试持久实体是否有效。我认为测试 JPA 实体映射是否正确以及一切是否按预期工作是有意义的,特别是对于具有级联属性的 @OneToMany/@ElementCollection/@ManyToMany/@OneToOne 的复杂实体映射(例如 CascadeType.ALL)。并确保满足所有 FK/PK/Unique 约束。

  2. 这是一个普遍的问题。具体部分是关于 Spring 测试框架。您可以在下面的代码中看到,DAO 层正在测试,但是由于测试方法被标记为@Transactional,更改应该被回滚,这里是should而不是must,因为我怎么能确定,更改实际上保存在数据库,可能一切都保存在内存中,因为事务被标记为回滚,所以没有数据真的发送到数据库?

  3. 更重要的是,这个测试失败了,因为 account.getId() 返回 0(id 生成是使用 @SequenceGenerator 完成的),但似乎这个值从未分配到 Account 的 id 字段中。这个测试只有在方法被@Rollback(false)注解时才会通过,所以当然不会发生回滚。

  4. 我是对的,在这种情况下,当使用 @Transactional 进行测试时,所有内容都在内存中(至少在不调用 flush() 之前),因此无法检查数据库约束是否正常工作。

  5. 根据上面的想法,测试实体插入的合适方法是什么,并确保插入完成,然后将所有内容回滚到初始状态,以便运行其他测试?(每次执行测试时清理@Before中的数据库?)

  6. 我不想使用 DBUnit,使用 Spring 根本没有使用 DBUnit 的意义。

    /li>
0 投票
0 回答
232 浏览

hibernate - 多数据源:1 RW + 许多 RO

我们有一个带有单个数据库“dbMain”的应用程序,具有一组读写操作。

现在我们需要添加额外的数据库 db1-db10 用于只读操作,以便在 SomeServiceImpl 中使用。

问题是:

  • 我需要在 SomeServiceImpl 使用几个 DAO(用于 dbMain 和 db1)
  • 在 tx:annotation-driven 只能定义单个 transactionManager,@Transactional 将仅使用它进行操作。
  • 有时我在 SomeServiceImpl 遇到 db-connection 泄漏,用于使用 db1DAO 进行操作。至少在 @PostConstruct init() {...}

真的,不想使用JTA。配置这种环境的正确方法是什么?

额外的数据库:

0 投票
1 回答
1319 浏览

hibernate - Spring + Hibernate:一起使用事务和非事务数据源

在我的 Spring 2.5.6 + Hibernate 应用程序中,我需要从具有不同模式的多个数据库读取/写入数据。该应用程序位于 Tomcat 上,因此我暂时不想使用 JTA,这样我就不需要迁移到成熟的应用程序服务器。

所以我决定只有一个事务数据源。我可以和其他人一起生活,而不是交易。

但不知何故,我无法让它工作。你能看看我可能做错了什么吗?

这是我的 applicationContext.xml:

如您所见,上面只是两个会话工厂的定义,每个都使用自己的数据源。事务管理器仅使用这些会话工厂之一,并且配置了注释驱动的 tx-management。

这是我试图测试事务行为的单元测试:


作为上述测试的结果,我希望将新行插入到非事务数据源中,因为事务数据源上的更改应该回滚,因为抛出了异常。但是,在此测试通过后,我看到两个数据源中都插入了行。

编辑:我已经走得更远了。我已经将 DaoHolder 变成了一个接口,将上述逻辑移到了一个实现接口的类(DaoHolderImpl)中,并用@Transactional 标记了这个类(不仅仅是方法)。我还将此类添加为 Spring Bean。所以现在 Spring 处理我的事务。但是这一次,当抛出异常时,新行会从两个数据源中回滚,而不仅仅是事务性的。这仍然不是我所期望的:/

有谁看到我做错了什么?提前致谢,

彼得

0 投票
1 回答
19463 浏览

hibernate - Spring:HibernateTransactionManager 处理多个数据源

在以下代码中(Spring 3):

  • dao1 使用附加到 datasource1 的会话工厂
  • dao2 使用附加到 datasource2 的会话工厂
  • txManager 是一个HibernateTransactionManager,使用与 dao1 相同的会话工厂

上面的代码以事务方式正常工作- 特别是,当没有抛出异常时,每个 dao 操作都会被提交(到 2 个不同的数据源)。当抛出异常时,每个 dao 操作都会回滚。

我的问题是:为什么它有效?在我读过的所有地方,我都被告知在处理多个数据源时使用 JtaTransactionManager。我宁愿不使用JTA。如果我让它在 HibernateTransactionManager 下运行,可能会产生什么后果?



有兴趣的更多细节:

每个数据源的定义如下:

每个会话工厂的定义如下:

事务管理器的定义如下:

每个 dao 类都扩展了 HibernateDaoSupport,insertRow 方法的内容或多或少类似于 dao1:

对于 dao2:

0 投票
1 回答
1429 浏览

mysql - 春季测试 - 回滚问题

我在我的应用程序中创建了 Spring 集成测试。问题是,一个测试没有正确回滚,在数据库中留下一些东西并导致后续测试失败。

我注意到,如果持久实体是简单实体,则测试效果很好。当实体是继承层次结构的一部分并且继承类型是 InheritanceType.JOINED 类型时,测试失败。当我将其更改为 InheritanceType.SINGLE_TABLE 时,它不会失败。

下面是代码: 测试类:

弹簧配置:

实体:

和 pom.xml 文件:

0 投票
1 回答
969 浏览

hibernate - 春天。使用 spring(hibernate) 事务管理数据库事务

你能纠正我它是如何工作的吗?用事务注释标记的方法。数据库事务在被拦截时是否与 spring 事务一起打开和提交。在这种方法未完成时,数据库中的所有相关资源也会保持锁定状态。例如,在事务方法中,我从数据库中获取了一些实体,然后多次更新或删除了其中的一些。这一切都发生在 spring 事务中,而 DB 事务仅发生在带有必要锁的事务方法结束时???如果方法会挂起,例如死锁,锁定的资源是否会为数据库中的其他资源保持锁定状态?如我所见是的..

他们都持有锁(23、21、20、5、6)。这怎么可能发生?我没有长时间的手术。只有死锁 :D 但这不应该发生!所以当我看到一些事务方法挂起,但资源保持锁定,这导致其他或下一个事务停止,等待锁定的资源和所有系统在某个时刻停止工作......

0 投票
1 回答
1695 浏览

spring - @ManagedBean 和 @Transactional - Spring 中的错误?解决方法?

我的 Webapp 中有以下 JSF 支持 bean

当它到达repository.save方法调用时 - 我收到以下错误

我有两个问题

  1. 这是因为这样的错误
  2. 我相信有两种解决方法 - 还有其他方法吗?

2.1 第一个解决方法 - 使用

2.2 第二种解决方法

创建一个辅助类并对其进行注释。

2.3(可能的第三种解决方法是在内部类的方法上注释 @Transactional 这与 2.2 非常相似)。

0 投票
2 回答
1470 浏览

database - Spring + Hibernate 与多线程环境中的事务

我有一个简单的应用程序,它通过 Hibernate 从 db (MySQL 5.1) 上的一个表中获取一些数据并显示内容。使用的主要框架是 Spring 3.0。查询在 @Transactional(read-only) (+第二缓存级别)中正确运行。问题出现在针对同一页面运行一些具有 20/30 请求的并发测试。一些页面请求返回 500 而不是 200。我想这是由于 @Transactional 不管理多线程访问(如果我错了,请纠正我)。

在控制器中,我有这样的东西:

日志说“doSomething”抛出了一些 NullPointerException,因为列表中没有传递的数据。

有没有办法用 Spring+Hibernate 实现一个多线程访问管理器来管理对 db 的并发请求?

0 投票
0 回答
132 浏览

hibernate - 在 weblogic 10 + java 5 中是否有任何用于休眠的分布式、严格、事务性、读/写 L2 缓存提供程序?

在 weblogic 10 + java 5 中是否有任何用于休眠的分布式、严格、事务性、读/写 L2 缓存提供程序?

Infinispan 看起来很吸引人,但您需要 java 6。手与 java 5 捆绑在一起。

0 投票
3 回答
10365 浏览

java - 声明式事务 (@Transactional) 在 Spring 中不适用于 @Repository

我正在尝试使用 Spring、JPA 和嵌入式 H2 数据库制作简单的应用程序。最近,我在声明性事务中遇到了这个奇怪的问题。如果我使用 @Repository 注释自动装配我的 DAO,他们只是不会提交。更具体地说,我在刷新时遇到异常:

这是我的设置:

持久性.xml

实体

database.xml(包含在根 spring 上下文中)

控制器

现在是有趣的部分。如果我从 DAO 中删除 @Repository 注释并在 database.xml 中明确指定它,一切正常。

更新

将另一个<tx:annotation-driven />放入spring servlet配置可以解决问题,但是为什么呢?