解决方案 »

  1.   


    我开始也觉得是跟事务有关,但是经过我进一步测试后,发现问题不在这,单步调试,在插入方法完成后,因为插入方法本身是独立的,且用REQUIRED传播范围增强,因此在插入方法结束后,查询数据已经出现在数据库里,表明数据已经被提交了,而且对hibernate对数据库操作 进行跟踪,发现此时hibernate压根就没查数据库。经过进一步测试发现一个很诡异的现象:为简化模型,
    这三个步骤采用的方法都属于某个service实现类的方法,其中get方法用Support传播范围加强,插入新记录的方法用REQUIRED方式增强。然后新建一个TestService类,将持有三个步骤方法的类用spring注入进去(代理增强),然后在该类的一个方法(UserLogin)里调用三个步骤调用方式,直接在main函数里
    TestService testService = context.getBean(TestService.class);
    testService.UserLogin(1);我发现以下古怪现象,
    当UserLogin方法以REQUIRED传播特性强时,毫无问题,可以正确查询到数据
    当UserLogin方法不做任何传播特性增强,即不加任何设置时,也是正常的,从spring的日志上看,此时三个步骤分别取了三次数据库连接
    当UserLogin方法以SUPPORTS传播特性增强时,异常出现,找不到数据。这一点我是最想不通的,因为testService是直接在main中调用的,调用它的main函数不处于事务中,它应该和第二测试不做任何增强是相同的,但是奇怪的是结果就是不一样
      

  2.   

    这个问题,其实lz没有问到点上,帮你说一下。
    1.spring+hibernate不是javaee范畴内的。
    2.javaee是一些技术标准,每种标准是具一批interface或者干脆就是一份规范文档,由支持javaee标准的服务器厂商自己开发。
    spring+hibernate我觉得怎么搞也说不上符合javaee标准,符合它自己的标准就好了
      

  3.   

    JPA标准里有说到双向关系的set方法里必须手动维护对方属性,就是在A的setB方法中调用B.setA