hibernate事务安全性(有,没有JBoss)

时间:2011-01-11 21:48:52

标签: hibernate transactions jboss jta

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

所以我将开始研究需要非脏读的事务,并确保(1)hibernate正确控制这些事务的事务安全级别,并且(2)能够仍然拥有那些脏读的事务是可以的。

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

安迪

2 个答案:

答案 0 :(得分:0)

这称为transaction isolation levels,以下是在hibernate中配置它们的方法

  

hibernate.connection.isolation - 设置   JDBC事务隔离级别。   检查java.sql.Connection   有意义的价值观但最重要的是   数据库不支持所有隔离   水平。例如。 1,2,4,8

答案 1 :(得分:0)

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

如果您决定使用Application Server,则可以将属性hibernate.transaction.factory_class设置为org.hibernate.transaction.JTATransactionFactory,Hibernate将根据您的指令加入/创建事务(em.getTransaction() .begin()/ commit())。

如果您有两个或更多“启用事务”组件,JTA特别有用,因为JTA根据总体结果协调事件和订单提交/回滚。例如,如果您有一个EJB事务将某些内容保留到数据库并发送电子邮件,则这两个操作都可以在事务内部,并且如果其中任何一个失败,则可以回滚它。但是,如果您对数据库事务中的感兴趣,那么您并不真正需要JTA。

回答你的上一个问题:如果你确实需要JTA但你不想使用EE Application Server,你可以寻找独立的JTA提供者,比如JOTM。但要小心:如果你发现自己为不同的服务添加了几个“独立”提供者,你最终可能会得到一个“自制的EE服务器”,这不是一件好事; - )