你好,banq,请教一个EJB+HIBERNATE的事务管理

你好,如果用CMP+HIBERNATE时,因为CMP和HIBERNATE都有事务,当在CMP里调用HIBERNATE时(不管是直接调用,还是通过DOM层再调),请问此时,事务是谁的?
  如果是EJB的话,EJB是怎么样把HIBERNATE的事务屏蔽掉的?如果HIBERNATE 更新出错时,EJB容器是不是就会自动检测到DAO出错了,然后ROLLBACK当前DAO的操作呢?

多谢

不要把HIBERNATE看得太特殊,它就是JDBC,所以,CMP和JDBC事务在EJB中都可以并存。

既然可以并存,那DAO中的数据库操作是谁的事务来控制?

既然可以并存,那DAO中的数据库操作是谁的事务来控制?

既然可以并存,那DAO中的数据库操作是谁的事务来控制?

既然可以并存,那DAO中的数据库操作是谁的事务来控制?

>然可以并存,那DAO中的数据库操作是谁的事务来控制。
搞清楚事务不是由hibernate或EJB产生的,而是本身就存在,事务分JDBC事务和JTA事务,EJB的session bean用的是JTA事务,属于声明式使用,和Spring一样。

只要Session Bean中抛出EJBException,就可实现事务。

你的问题原理涉及嵌套事务,可参考这方面书籍。

是呀,你说的对呀,但我还是不知道,如果session bean和hibernate的事务都存在,那DAO中的事务由谁来控制?