返回顶部
首页 > 资讯 > 精选 >Hibernate中union如何使用
  • 237
分享到

Hibernate中union如何使用

2023-06-17 12:06:56 237人浏览 独家记忆
摘要

Hibernate中uNIOn如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原来代码String countHql2 = &qu

Hibernate中uNIOn如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

原来代码

String countHql2 = "select count(distinct p) from Project as p,CommentSimple as c,ProjectBookmark as b where (" + "c.owner.id=? and p.id=c.targetId and c.targetType=500) or (b.user.id=? and p.id=b.project.id)";      String hql2 = "select distinct p from Project as p,CommentSimple as c,ProjectBookmark as b where ( "+ "c.owner.id=? and p.id=c.targetId and c.targetType=500) or (b.user.id=? and p.id=b.project.id)";

主要是找出某个人所有评论过或收藏过的项目。简单表结构如下:

project:id owner_id(用户id)保存项目的基本信息

project_bookmark:uid(用户id),project_id(收藏的项目的id),owner_id(收藏者的id)

comment_simple:target_type(保存对某种对象的评论,值为500时表示的对项目的评论),target_id(保存对某种对象的评论,值为该对象的id),project_id(项目的id),owner_id(评论者的id)

由于这个sql执行时所建的索引无法使用,而且还造成了三个表连接会有大量的无效的查询以及重复结果,***还得要distinct可以想象执行的效率。

只好改用union来重写,需要用到hibernate的native  sql,经过努力终于找到可以用union找出整个对象以及在配置文件中与该对象有关系的对象的方法。

与其说是找出来的,不如说是试出来的,代码如下:

union

String sql1 = "SELECT COUNT(*) FROM(SELECT p.id FROM project p,comment_simple c WHERE p.id=c.target_id AND c.target_type=500 AND c.uid=" + userId + " UNION SELECT pr.id FROM project pr,project_bookmark b WHERE pr.id=b.project_id AND b.uid=" + userId + ") AS temp"; String sql2 = "(SELECT {p.*} FROM project p,comment_simple c WHERE p.id=c.target_id AND c.target_type=500 AND c.uid=" + userId + ")" + "UNION" + "(SELECT {p.*} FROM project p,project_bookmark b WHERE p.id=b.project_id AND b.uid=" + userId + ")LIMIT " + (pageIndex - 1) * maxPerPage + "," + maxPerPage; SQLQuery query = this.getSession().createSQLQuery(sql1); Integercount=Integer.valueOf(((BigInteger)query.uniqueResult()).toString()); SQLQuery query2 = this.getSession().createSQLQuery(sql2); query2.addEntity("p", Project.class); List<Project> list = query2.list();

sql1符合条件的项目的总数。sql2求出符合条件项目的某一页。

要注意的是:sql2中{p.*}要写成一样的。

简而言之:select {a.*} from A a where ... union select {a.*} from A a where...

如果还要排序的话sql2换成sql3:

需要order by时

String sql3 = "(SELECT {p.*},p.created FROM project_hz p,comment_simple c WHERE p.id=c.target_id AND c.target_type=500 AND c.uid=" + userId + ")" + "UNION" + "(SELECT {p.*} ,p.created FROM project_hz p,project_bookmark b WHERE p.id=b.project_id AND b.uid=" + userId + ") ORDER BY created LIMIT " + (pageIndex - 1) * maxPerPage + "," + maxPerPage;

看完上述内容,你们掌握Hibernate中union如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Hibernate中union如何使用

本文链接: https://lsjlt.com/news/288959.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Hibernate中union如何使用
    Hibernate中union如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原来代码String countHql2 = &qu...
    99+
    2023-06-17
  • SQL中的union和union all怎么使用
    这篇文章主要介绍了SQL中的union和union all怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL中的union和u...
    99+
    2023-03-01
    sql union union all
  • mysql中union和union all的使用及注意事项
    目录1. sql中 union 和 union all 的用法2. 注意事项2.1、UNION 和 UNION ALL 内部的 SELECT...
    99+
    2022-11-13
    mysql union和unionall区别 mysql的union和union all union和union all
  • mysql中union和union all的使用及注意事项
    在MySQL中,UNION和UNION ALL是用于合并两个或多个SELECT语句的结果集的操作符。它们的主...
    99+
    2023-08-11
    MySQL
  • mysql中union怎么使用
    这篇文章主要讲解了“mysql中union怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中union怎么使用”吧! ...
    99+
    2024-04-02
  • mysql中使用union和union all要注意哪些事项
    在使用UNION和UNION ALL时,需要注意以下事项:1. UNION和UNION ALL的区别...
    99+
    2023-08-11
    mysql
  • sql中union和union all的用法是什么
    这篇文章给大家介绍sql中union和union all的用法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用...
    99+
    2023-06-28
  • oracle中union用法
    oracle 中 union 用法是将多个具有相同结构的查询结果集合并成一个单一结果集。该操作符会删除重复的记录,除非使用 union all,后者会合并所有记录,包...
    99+
    2024-04-30
    oracle
  • sql中union用法
    union 运算符在 sql 中用来合并相同结构的表或子查询的结果集,排除重复行。它具有以下用法:合并具有相同列名和数据类型的多个表或子查询的结果集合并为一个。排除结果集中重复...
    99+
    2024-05-15
  • sql中的union怎么使用
    在SQL中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。使用UNION时,要求两个SE...
    99+
    2023-09-12
    sql
  • sql中union all怎么使用
    在SQL中,UNION ALL用于合并两个或多个SELECT语句的结果集,并返回一个包含所有记录的结果集。与UNIO...
    99+
    2023-08-25
    sql
  • Oracle 中union的用法
    UNION 指令的目的是将两个 SQL 语句的结果合并起来,可以查看你要的查询结果. 例如: SELECT Date FROM Store_Information UNION SEL...
    99+
    2024-04-02
  • sql中union all用法
    sql 中 union all 操作符用于合并多个 select 语句的结果集,不删除重复行,保留所有可用的数据。用途包括合并相似结构表中的数据、排除重复行并保留所有...
    99+
    2024-05-10
  • mysql中union的用法
    在 mysql 中,union 运算符合并来自多个表或子查询的结果集,只返回唯一的结果行。它主要用于合并互不相交的结果集,并允许通过 union all 保留重复行。...
    99+
    2024-04-26
    mysql
  • oracle中union all用法
    union all 在 oracle 中用于合并不同表或子查询的结果集,同时保留重复行。具体用法如下:合并不同表中的行:select from 表1 unio...
    99+
    2024-04-30
    oracle
  • sql中union怎么用
    union 操作将来自不同表的行合并为一个结果集,去除重复行。语法格式为:select column_list from table1 union sele...
    99+
    2024-05-02
  • sql中union的作用
    union 运算符将多个表的具有相同列结构的行合并为一个结果集,消除重复行并自动转换数据类型。1. 合并来自不同表的行;2. 消除重复行;3. 转换数据类型以匹配列结构。 S...
    99+
    2024-05-02
    排列
  • sql中union的用法
    union 运算符将多个 select 语句的结果合并成一个不含重复行的结果集。其特点包括:合并结果集的列顺序和数据类型必须相同。不支持聚合函数。union...
    99+
    2024-05-07
    聚合函数
  • union all在mysql中怎么使用
    本篇内容主要讲解“union all在mysql中怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“union all在mysql中怎么...
    99+
    2024-04-02
  • 如何用union合并多个select
    要使用UNION合并多个SELECT语句,可以按照以下步骤进行操作:1. 确保每个SELECT语句返回的列数和数据类...
    99+
    2023-08-11
    union select
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作