|
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-12-06
我们系统原先采用SessionEjb+CMP的架构,现在准备将CMP用Hibernate来替换,这其中Session的管理该如何设计?
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-06
在SessionBean的setSessionContext方法里面lookup Hibernate SessionFactory。在每个remote interface实现方法里面openSession,操作,close Session。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-06
那每个business method都会调用setSessionContext方法,都要去lookup factory,factory只要lookup一次就好了吧?在setSessionContext里面open session不好吗?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-06
ggking 写道 那每个business method都会调用setSessionContext方法,都要去lookup factory,factory只要lookup一次就好了吧?在setSessionContext里面open session不好吗?
老弟,你用过EJB吗?如果没有的话,学习一下先。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-12-06
重新读过masterehb2,我理解错了...
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-07
我在business method里面
getSession beginTransaction do commitTransaction 当我commit时报错,tried to commit connection in global tran. 后来我把hibernate.cfg.xml里面增多 <property name="transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property> <property name="transaction.manager_lookup_class ">net.sf.hibernate.transaction.WebSphereTransactionManagerLookup</property> <property name="jta.UserTransaction">java:comp/UserTransaction</property> 再运行时会说Could not find UserTransaction in JNDI 不知道webshphere下默认的usertransaction的jndi是什么? |
|
| 返回顶楼 | |
|
最后更新时间:2004-12-07
你应该好好看看精华文章
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-07
usertransaction的jndi name应该是jta/usertransaction,可改成这个没有什么报错了,但commit好像没有生效,db里面数据都没有改变啊!
再次调用该ejb的business方法时,session里load的数据也恢复成修改前的样子。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-12-08
仔细看了精华版的文章,总算搞定了,hibernate里面动态构建sql的时候,也可以实现ibatis那样的灵活可配置性吗?hibernate里面的条件语句不能根据参数是否为null而自动判断该不该生成吧?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-12-08
ggking 写道 仔细看了精华版的文章,总算搞定了,hibernate里面动态构建sql的时候,也可以实现ibatis那样的灵活可配置性吗?hibernate里面的条件语句不能根据参数是否为null而自动判断该不该生成吧?
实际上我并不觉得ibatis的那种可配置式的动态条件SQL是最好的方案。ibatis是基于配置文件映射SQL的,所以他必须在配置文件里面配置动态条件SQL。因为条件本身的不确定性,所以非要在配置文件里面配置动态条件,会把配置文件搞得比较复杂。 Hibernate中,你可以用Criteria by Example的方式来达到你的要求。 |
|
| 返回顶楼 | |






