总结DetachedCriteria级联查询
来源:互联网 发布:python黑客编程pdf 编辑:程序博客网 时间:2024/06/05 00:52
如果实体对象中没有关联对象的情况使用DetachedCriteria进行查询是一件很简单的事情。
如果实体对象中含有OneToOne或者ManyToOne关联对象的情况可以参考下面方式,使用别名:
假设要通过stuName查询一个学生Student记录,可以如下:
如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
没错,就是要先建立team的引用,才能用team导航到teamName。
这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
据我个人的经验,team后只能跟其主键属性,比较其他属性要用别名。此主键属性可以用“id”字符来指代,也可以用team的主键属性来指代。换句话说,我的Student类的类主键“stuId”,不管是在HQL还是在QBC中,都可以用stu.id来指代stu.stuId。在这里可以看出 “id”字符的特殊性。上述是个人观点,并未得到确实的证实。
补充:
如果是三级或更多级查询怎么办?
以三级查询为例,仍引用上面的例子:
如果实体对象中含有OneToMany关联对象的情况,既是实体中含有list或Set等关联实体集合的情况下怎么办呢?
这个还不知道怎么办,呵呵
方法其实是非常简单的:
其中tags是个Set,但是想查找属性tags中含有id为tagId的实体,使用上面的就可以了。
如果实体对象中含有OneToOne或者ManyToOne关联对象的情况可以参考下面方式,使用别名:
假设要通过stuName查询一个学生Student记录,可以如下:
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
没错,就是要先建立team的引用,才能用team导航到teamName。
这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
- 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”字符的特殊性。上述是个人观点,并未得到确实的证实。
补充:
如果是三级或更多级查询怎么办?
以三级查询为例,仍引用上面的例子:
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.createAlias("t.school", "s");
- dc.add(Restrictions.like("s.schoolName", schoolName, MatchMode.ANYWHERE));
如果实体对象中含有OneToMany关联对象的情况,既是实体中含有list或Set等关联实体集合的情况下怎么办呢?
这个还不知道怎么办,呵呵
方法其实是非常简单的:
- dc.createAlias("tags", "t");
- dc.add(Restrictions.eq("t.id", tagId));
其中tags是个Set,但是想查找属性tags中含有id为tagId的实体,使用上面的就可以了。
阅读全文
0 0
- 总结DetachedCriteria级联查询
- 总结DetachedCriteria级联查询
- 总结DetachedCriteria级联查…
- DetachedCriteria 查询
- MyBatis总结(2)--级联查询
- DetachedCriteria关联查询
- 关于 DetachedCriteria 查询问题
- 用DetachedCriteria查询
- J2EE 初识DetachedCriteria查询
- DetachedCriteria多表查询
- DetachedCriteria 离线查询
- DetachedCriteria离线查询示例
- 离线查询DetachedCriteria详解
- Hibernate-DetachedCriteria离线查询
- hibernate DetachedCriteria 查询
- DetachedCriteria查询实例
- DetachedCriteria查询和子查询
- 级联查询
- 我常用的DB2 for z/OS DBA面试题及答案
- Qt读取excel
- Java default关键字
- mybatis在logback中配置输出执行sql
- [spring]启动时报错:NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
- 总结DetachedCriteria级联查询
- 关于Linux文件目录操作的12个常用命令 写在前面:
- 极其方便的使用Mybatis单表的增删改查
- pthread_cleanup_push() & pthread_cleanup_pop()
- java并发编程学习(五) java 内存模型的基础
- js日期选择年月日三级联动实现
- JDK安装与配置
- 我们物联网专业的嵌入式实习-day05(开发智能家居系统-线程)
- CPU参数科普