一个service类中用到两个dao类的问题
项目中spring集成了hibernate,dao类里的sessionfactory都是注入的我目前有个service类,其中先后调用了两个dao类a和b的方法
其中调用b的方法时要用到执行a的方法时在数据库中所产生的数据
但由于不是一个session里,调用b的方法时根本查不到调用a的方法时产生的记录
不想分两次提交,请问各位朋友这种情况该如何处理,有什么好的办法吗?
谢谢大家了! --------------------编程问答-------------------- 不懂你想说什么,service层调用两个dao的方法是没问题的,无论是查询还是增加!不懂你的事物怎么处理的,我也刚学这个 --------------------编程问答-------------------- service中执行dao类的a,b方法在一个事务中,是一起提交的。如果要在执行b方法时用到a方法执行的结果,肯定要在不同的事务中,分两次提交。 --------------------编程问答-------------------- 这个是个问题,建议分开写吧。。。 --------------------编程问答--------------------
不需要吧 执行A的时候返回你想要数据提供给B用就行了啊 比如你A方法插入一条新数据 B要A的新数据ID 你调用了A后 新数据的Bean 就能getId()得到数据了 --------------------编程问答-------------------- spring的事务管理 --------------------编程问答-------------------- 为什么b不能调用a查出来的数据呢?即使不是同一个session,也可以获取的啊。如果你的事务易做图切的是service层,那2个dao都是用同一个session的,因为这是同一个事务。。 --------------------编程问答-------------------- 不可能不能调用啊 你a查出来的数据 比如User表 那你把查出来的User对象 存到session里面 ,或者简单点 在servlet定义个User对象 a方法吧查询出来的数据赋值给这个User对象,然后b方法取出来不就是了 --------------------编程问答-------------------- 同意四楼...自己试一下就行,字母表的问题,hibernate实现了..能save了直接调用,在一个事务内 --------------------编程问答-------------------- 根据你的描述 。大概是事物放在service service方法没执行完 ,事物还没提交 ,DAI的add动作没有commit 。所以数据库根本没有产生数据。因此查不到 。
--------------------编程问答-------------------- 将事务控制在service层比较好。 --------------------编程问答--------------------
++1
要么抛弃ssh --------------------编程问答-------------------- 在web.xml上,引入struts2之前 ,写上如下代码
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
利用spring的OpenSessionInViewFilter来控制session。一个请求对应一个session
--------------------编程问答-------------------- 如果事务的切点在service层的话,你可以把这个service的操作放在controller实现不就可以了 --------------------编程问答-------------------- 不懂在说什么,你想用a()方法中的数据,那么你就返回值返易做图去。要不然传进去一个集合,把查到的数据扔进去,都是暴力手段。你的需求太模糊了
补充:Java , Java EE