Advertisement
Advertisement

新足迹

 找回密码
 注册
新足迹 门户 IT专业论坛 查看内容

IT民工问问题: JPA/Hibernate 如何确保多个访问用同一个connection

2010-9-16 11:47| 发布者: zn7726 | 查看: 3478| 原文链接

这是中途接手的一个项目, 最近发现个问题, google无果, 这里问问看.

系统框架: Spring Framework, JPA + Hibernate, MVC是struts. Module 类就是POJO, 用annotation做O/R mapping. DAO里面有EntityManager实例, 用来load和persist module object. 通过Spring inject DAO 到 Struts Action里.

功能需求: 页面更改学生成绩, 后台先更新grade和mark, 然后call一个Oracle procedure, procedure里run几个batch, 确定并更新这个学生的状态(grad/exclude/enrol ...)

Issue: 更改学生成绩是通过 DAO 类, 不用(也没法)操作connection对象, 直接entityManager.persist(), so far so good. 然后要call Oracle procedure, 但是没法通过entityManager (JPA没有相关API), 只能从datasource里面拿个connection出来(JNDI lookup), 问题在于, 这个JNDI拿到的connection和上面DAO用到的connection(EntityManager控制)不是同一个, 所以DAO刚刚保存的数据在call Oracle procedure这个connection里不可见!

我试了写一个Oracle function, 然后通过entityManager.createNativeQuery()来call这个function, 结果发现问题依旧, DAO保存的状态在这个function里不可见!

我试过Spring的Transaction, PlatformTransactionManager这个class, 但是也没有帮助.

问题今天已经想办法绕过去了, 但是也许下次就绕不过去了哪? 达人给讲讲吧. 如果哪里说的不清楚, 我一定解答.
Advertisement
Advertisement


Advertisement
Advertisement
返回顶部