浏览 5036 次
锁定老帖子 主题:谁能不使用匿名内部类写出这个方法
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-12-02
但是为了获得的Criteria和HibernateTemplate的是一个Session 也是没有办法,否则就会出现Illegal attempt to associate a collection with two open sessions错误 谁知道能够不通过内部调用解决这个问题 本以为只是查询,可以蒙混过关的(见注释掉代码) 在这里使用了HibernateTemplate的createCriteria而没有使用execute 是没有事务支持和异常管理的,但是考虑到Criteria执行的只是查询,这样用也算是能蒙混过关了 (但实际上,不行) BTW: 如果老段进来,请注意一下你发的那些代码也有这个问题 如果Robbin进来,你在SpringDAO设计帖子中说的 引用 HibernateTemplate中的事务代码,如果你不用HibernateTemplate,那么似乎还是写上比较好
不知道你是否使用过这种方法?实际上这些是继承自HibernateAccessor,写在这里代码会比CallBack更难看,不知道你怎么看? /** * 取特定大小记录集合 */ protected Iterator getSomeObjects(final Class refClass,final int position, final int length); throws Exception { Iterator iterator = null; //查出的PO调用HibernateTemplate的delete(object)会报错的代码 /* Criteria crit = getHibernateTemplate();.createCriteria( getSession();, refClass);; //设置游标的起始点 crit.setFirstResult(position);; //设置游标的长度 crit.setMaxResults(length);; iterator = crit.list();.iterator();; */ List result = (List); getHibernateTemplate();.executeFind( new HibernateCallback(); { public Object doInHibernate(Session session); throws HibernateException { Criteria crit = getHibernateTemplate();.createCriteria( session, refClass);; //设置游标的起始点 crit.setFirstResult(position);; //设置游标的长度 crit.setMaxResults(length);; return crit.list();; } });; //查询到的结果放入迭代器 iterator = result.iterator();; return iterator; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-12-04
请明白内部类的作用是什么。
获得是不是同一个session与内部类有关吗?只与实现的机制有关。 其实可以建议看一下spring的代码,这样你就会明白了。 |
|
返回顶楼 | |
发表时间:2004-12-04
看一下 HibernateDaoSupport中getSession的代码,要获得session不一定要callback
|
|
返回顶楼 | |
发表时间:2004-12-04
xiaoyu:
我明白内部类的作用,至于你说的 xiaoyu 写道 获得是不是同一个session与内部类有关吗?只与实现的机制有关。 没错,是与内部类没关系,但是我这里并没有说它于内部类有关系(你见到这样的文字了吗?) 我是说HibernateTemplate的实现机制把它和内部类绑到了一起 也就是说如果你使用HibernateTemplate,你就必须使用它的内部类 而不使用内部类的方法,Robbin在《Spring的DAO设计实践》一贴中也提出了相应的办法,但是我不知道他试验过没有,因为我感觉更麻烦,这里我不是要搞清楚该怎么做,而是想讨论为什么HibernateTemplate要采用这种实现方式,以及有没有更简单自然的方法 so,在回答前,请仔细考虑一下问题 BTW: 不知道你试验过我那段代码没有 从我注释掉那段代码中得到的List中的Object 如果你调用HibernateTemplate的delete(Object object)来删除的话 你就会得到一个 Illegal attempt to associate a collection with two open sessions错误 这是POJO管理策略的问题 建议你看看Hibernate的PersistentCollection源码 |
|
返回顶楼 | |
发表时间:2004-12-04
jjx 写道 看一下 HibernateDaoSupport中getSession的代码,要获得session不一定要callback
我说的是获得同一个Session |
|
返回顶楼 | |