总结DetachedCriteria级联查…
来源:互联网 发布:java贪吃蛇源代码详解 编辑:程序博客网 时间:2024/06/06 02:06
原文地址:总结DetachedCriteria级联查询作者:梦里花落
如果实体对象中没有关联对象的情况使用DetachedCriteria进行查询是一件很简单的事情。
如果实体对象中含有OneToOne或者ManyToOne关联对象的情况可以参考下面方式,使用别名:
假设要通过stuName查询一个学生Student记录,可以如下:
Java代码
- DetachedCriteria dc =DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("stuName", stuName,MatchMode.ANYWHERE));
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
Java代码
- DetachedCriteria dc =DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("team.teamName", teamName,MatchMode.ANYWHERE));
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
Java代码
- DetachedCriteria dc =DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.add(Restrictions.like("t.teamName", teamName,MatchMode.ANYWHERE));
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);dc.createAlias("team", "t");dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
没错,就是要先建立team的引用,才能用team导航到teamName。
这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
Java代码
- DetachedCriteria dc =DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("team.id", teamId,MatchMode.ANYWHERE));
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));
据我个人的经验,team后只能跟其主键属性,比较其他属性要用别名。此主键属性可以用“id”字符来指代,也可以用team的主键属性来指代。换句话说,我的Student类的类主键“stuId”,不管是在HQL还是在QBC中,都可以用stu.id来指代stu.stuId。在这里可以看出“id”字符的特殊性。上述是个人观点,并未得到确实的证实。
补充:
如果是三级或更多级查询怎么办?
以三级查询为例,仍引用上面的例子:
Java代码
- DetachedCriteria dc =DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.createAlias("t.school", "s");
- dc.add(Restrictions.like("s.schoolName", schoolName,MatchMode.ANYWHERE));
设置返回ROOT对象
0 0
- 总结DetachedCriteria级联查…
- 总结DetachedCriteria级联查询
- 总结DetachedCriteria级联查询
- 级联查
- DetachedCriteria
- DetachedCriteria
- js 地区三级联查
- hibernate级联增删改查
- Hibernate级联关系总结
- ibatis 查级联的多张表数据方法
- hibernate One2Many级联增删改查
- MyBatis总结(2)--级联查询
- 数据库中数据增删查改可能的级联操作
- Entity Framework 5.0 增删改查(级联)
- Hibernate ManytoMany 标注级联增删改查完整操作
- hibernate核心API和级联的增删改查(CRUD)
- 年份,学院,专业,班级Js四级联查
- Hibernate级联及控制反转的增删改查
- Java多线程实现异步调用
- jQuery学习积累
- 使用ssh管理远程主机
- java-线程池队列饱和策略
- Arcgis中碎小斑块的处理
- 总结DetachedCriteria级联查…
- 医疗专用数据库Cache对接
- 转载 hessian学习总结
- C++ 基本内置类型
- turtlebot技术参数
- java读取视频时长
- 主键中mappedBy的具体使用及…
- 时间格式化
- MYSQL 导出数据库中某张表的部分数…