Spring+Hibrenate中findByCriteria(criteria, start, limit)查询重复的问题解决
来源:互联网 发布:淘宝新开店铺有扶持吗 编辑:程序博客网 时间:2024/05/29 09:16
1、问题出现的场景:两个Entity互相关联,我这里有两个类MessageMedel和CaseProcess,代码如下:
MessageModel类:
public class MessageModel extends Model {@Id@GeneratedValue@OrderBy("id")private long id;@ManyToMany(fetch = FetchType.EAGER)private List<Dict> recivers = new ArrayList<Dict>();@ManyToOneprivate Dict messageType;// 关联多个CaseProcess对象@OneToMany(cascade = CascadeType.ALL)private List<CaseProcess> caseProcessList;}
CaseProcess类:
@Entitypublic class CaseProcess extends Model {@Id@GeneratedValueprivate long id;@ManyToOneprivate Dict timerType;@ManyToOneprivate Dict caseGrade;@ManyToOneprivate Dict caseStatus;// 关联一个MessageModel对象@ManyToOneprivate MessageModel messageModel;}其中MessageModel中caseProcessList关联多个CaseProcess,CaseProcess中关联一个MessageModel,当使用hibernateTemplate.findByCriteria(criteria, start, limit);分页查询时,会发生数据重复的现象。该方法参数中criteria是由以下方法获得的:
protected DetachedCriteria getConditions(String query,Map<String, String> queryMap) {return DetachedCriteria.forClass(this.entityClass);}问题就出在了return DetachedCriteria.forClass(this.entityClass);一句,如果是在MessageModelService中,该句在查询MessageModel(记为m1)时,会级联查询CaseProcess,而CaseProcess中又关联着一个MessageModel(记为m2),如果m1和m2在数据库中是同一条数据,则在hibernateTemplate.findByCriteria(criteria, start, limit);执行后,发生重复,解决办法是:
在MessageModelService中getConditions方法改写为:
@Overrideprotected DetachedCriteria getConditions(String query,Map<String, String> queryMap) {DetachedCriteria detachedCriteria = super.getConditions(query, queryMap);detachedCriteria.setFetchMode("caseProcessList", FetchMode.SELECT);return detachedCriteria;}
在CaseProcess中getConditions改写为:
@Overrideprotected DetachedCriteria getConditions(String query,Map<String, String> queryMap) {DetachedCriteria detachedCriteria = super.getConditions(query, queryMap);detachedCriteria.setFetchMode("messageModel", FetchMode.SELECT);return detachedCriteria;}
问题解决,这里特别感谢http://blog.sina.com.cn/s/blog_6af9cfe80101277m.html这篇文章的作者!
- Spring+Hibrenate中findByCriteria(criteria, start, limit)查询重复的问题解决
- hibrenate 中多对多的查询方法
- Hibrenate中如何使用Like进行查询
- oracle中start with查询数据重复
- Hibernate中Criteria的使用(条件查询)
- hibernate中criteria查询
- MongoDB中Criteria查询
- hibernate中Criteria查询
- 获取不到Extjs中分页参数start,limit的原因
- Hibrenate 查询缓存
- Spring Hibernate findByCriteria(...)方法 使用
- MySql中limit子查询的解决办法
- MySql中limit子查询的解决办法
- Hibernate的Criteria查询
- Hibernate Criteria 查询 出现重复实体
- hibrenate使用select语句查询多张表的部分字段,并封装到一个实体类(无配置文件)中
- spring bean id重复覆盖的问题解决
- spring bean id重复覆盖的问题解决
- 理解一下 GK Zone 20 与GK Zone 20N的区别
- php怎么实现在登陆界面登陆之后在主页面显示你的登陆个人i信息?
- ogre的动态光照
- 61. 统一二进制
- HDU 2100 Lovekey
- Spring+Hibrenate中findByCriteria(criteria, start, limit)查询重复的问题解决
- 在mac下 java开发工具详解
- 在类中使用线程
- Oracle―distinct的用法
- C实现文件批量修改
- CKPlayer的使用
- 统计学习
- accumulate everyday:style、currentStyle、getComputedStyle样式
- shell 脚本