0

我目前只使用 Hibernate 和 tomcat(没有 JBoss),并且有休眠事务,我不清楚我实际使用的事务安全级别,特别是对于那些读取和获取值然后更新它们的事务)。因此我可能会得到脏读?

因此,我将开始研究需要非脏读的事务,并确保 (1) hibernate 正确控制这些事务的事务安全级别,以及 (2) 仍然能够让那些事务处于脏状态读取没问题。

我是否需要使用 JBoss 安装 Hibernate 来控制事务安全级别?如果是这样,那么在不显着更改我的应用程序以使用 J2EE api 的情况下执行此操作的最简单方法是什么,因为我目前正在使用基本的 Hibernate api。或者更好的是,我可以在不使用 JBoss 的情况下通过 Hibernate 获得 JTA 控制吗?

安迪

4

2 回答 2

0

您是否使用 em.getTransaction().begin() 和 commit() 明确标记您的交易?如果是这样,Hibernate 会将事务管理委托给 JDBC 驱动程序,并且您可以使用其他属性(在驱动程序级别和 Hibernate 级别,如隔离级别)进行配置。

如果您决定使用应用程序服务器,您只需将属性 hibernate.transaction.factory_class 设置为 org.hibernate.transaction.JTATransactionFactory,Hibernate 将根据您的指示加入/创建事务(em.getTransaction().begin( ) / 犯罪())。

如果您有两个或多个“启用事务”组件,JTA 特别有用,因为 JTA 会根据整体结果编排事件并订购提交/回滚。例如,如果您有一个 EJB 事务将某些内容持久化到数据库并发送电子邮件,则这两个操作都可以在事务内,并且如果其中任何一个操作失败,则可以回滚。但是如果您对数据库事务感兴趣,那么您实际上并不需要 JTA。

并回答您的最后一个问题:如果您确实需要 JTA 但您不想使用 EE 应用程序服务器,您可以寻找独立的 JTA 提供程序,例如 JOTM。但要小心:如果您发现自己为不同的服务添加了多个“独立”提供程序,您最终可能会得到一个“家庭构建的 EE 服务器”,这不是一件好事;-)

于 2011-01-12T12:30:58.383 回答
0

这被称为事务隔离级别,下面是在休眠中配置它们的方法

hibernate.connection.isolation - 设置 JDBC 事务隔离级别。检查 java.sql.Connection 以获得有意义的值,但请注意大多数数据库不支持所有隔离级别。例如。1、2、4、8

于 2011-01-12T04:38:36.160 回答