我目前只使用Hibernate和tomcat(没有JBoss),并且有hibernate事务,我不清楚我实际使用的事务安全级别,特别是那些读取和获取值然后更新它们的事务) 。因此我可能会弄脏读物?
所以我将开始研究需要非脏读的事务,并确保(1)hibernate正确控制这些事务的事务安全级别,并且(2)能够仍然拥有那些脏读的事务是可以的。
我是否需要使用JBoss安装Hibernate来控制事务安全级别?如果是这样,最简单的方法是在没有显着改变我的应用程序以使用J2EE api的情况下执行此操作,因为我目前正在使用基本的Hibernate apis。或者更好的是,我可以在不使用JBoss的情况下使用Hibernate获得JTA控制吗?
安迪
答案 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服务器”,这不是一件好事; - )