JDBC可以设置Connection.setTransactionAsolation(int level)确定使用READ UNCOMMITED、REDA COMMITED等事务的隔离级别,可是在EJB3.0中使用JPA,如何设置啊?EJB只为组件提供了@TransactionAttribute注释设置Session Bean方法的事务属性,并未提供设置事务级别的注释啊?

解决方案 »

  1.   

    如你所想,JPA的确没有提供事务级别的设置,只提供了@TransactionAttribute 注释用作定义一个需要事务的方法。
    它可以有以下参数:
    1.REQUIRED:方法在一个事务中执行,如果调用的方法已经在一个事务中,则使用该事务,否则将创建一个
    新的事务。
    2.MANDATORY:方法必须在一个事务中执行,也就是说调用的方法必须已经有一个事务,否则新抛出一个错
    误(ERROR)。
    3.REQUIRESNEW:方法将在一个新的事务中执行,如果调用的方法已经在一个事务中,则暂停旧的事务。
    4.SUPPORTS:如果方法在一个事务中被调用,则使用该事务,否则不使用事务。
    5.NOT_SUPPORTED:如果方法在一个事务中被调用,将抛出一个错误(ERROR)
    如果没有指定参数,@TransactionAttribute 注释使用REQUIRED 作为默认参数。JPA提供的事务管理最大的作用也就是用在commit、回滚上。
      

  2.   

    首先谢谢楼上的回答哦!那岂不是用JPA不能设置事务的隔离级别了啊?JPA的事务隔离级别好像是假定为READ COMMITED,这样不到好吧?要是我想用SERIALIZABLE呢?有没有解决办法啊?Hibernate有hibernate.connection.isolation设置隔离级别,我知道persistence.xml里可以指定JPA实现的一些Property,但是这样岂不是整个JPA的隔离级别都一样了啊?不能想Connection一样,每个DAO方法可以设定成不同的隔离级别!
      

  3.   

    jpa 为什么在我现在的项目 可以通过IDE添加,而换一个项目就没有不可以 ,其中需要配置什么东西可以说一下吗 。你写的很不错了
      

  4.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【andrew830314】截止到2008-07-29 17:22:17的历史汇总数据(不包括此帖):
    发帖的总数量:10                       发帖的总分数:120                      每贴平均分数:12                       
    回帖的总数量:113                      得分贴总数量:75                       回帖的得分率:66%                      
    结贴的总数量:6                        结贴的总分数:90                       
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:4                        未结的总分数:30                       
    结贴的百分比:60.00 %               结分的百分比:75.00 %                  
    无满意结贴率:16.67 %               无满意结分率:22.22 %                  
    楼主加油

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=andrew830314
      

  5.   

    jpa确实没有提供,要在配置文件中改的话就都改了。
    制定ejb规范的专家建议隔离级别应该在资源级设定,借助于资源API,或者其他方式。所以只能用Connection.setTransactionIsolation()来完成隔离级别的设定。