,springdatajpa多表关联查询

  如何多表关联查询springdatajpa,springdatajpa多表关联查询

  00-1010如何使用union多表分页条件查询分页条件踩过的坑分享几个用来解决原生sqlunionbug的mysql语法jpa。

  00-1010当前项目有全局搜索功能,需要涉及7-8个主表。由于当前项目使用Jpa,我决定使用union通过原生sql进行查询。因为不熟悉这个框架,被坑了很久。特此记录。

  00-1010 1.在参数列表中,使用@Param批注(例如:@ param ("userid") long userid)

  2.参数应该以sql中:userId的形式注入(例如:person.user_id=:userId),或者用?1 ?2也可以按照参数的顺序注入。我用了第一个。

  3.sql应该用@Query的值写,设置nativeQuery=true

  4.如果要设置一个可能为空的值,比如有一个分类,需要作为条件查询,但是这个值可能为空,所以需要在sql中判断。如果为空,则不会被过滤。其实语法和sql中的判断是一样的。

  其中IF(:category不为空,a.category=:category不为空,1=1)

  00-1010 1.参数countQuery必须添加到分页中,上面的sql价格是可以计数的。

  2.传入Pageable,不要传入sort,否则会报错。暂时没有找到解决办法。

  例如,select * from a is your sql

  那么分页应该是

  select * from(select * from a)b order by?countQuery中不需要添加#{#pageable}order by。

  3.返回PageObject[],封装内容的顺序就是sql查找的顺序。

  00-1010 1.对于多表联合查询,查询字段应该相同。例如,第一个用户表必须查询id、姓名、性别,第二个地址表也必须查询id、姓名、性别。如果没有这样的字段,它将自我封装并返回一个固定值,该值可以是空字符串。

  2.当它被引入pageable时。#{#pageable}必须这样写

  00-1010 1.判断是否为空,如果不为空,则查询时间在传入时间之间的数据。

  如果(3360开始时间不为空,结束时间不为空,则继续。Create _ time介于3360开始时间和3360结束时间之间,1=1)这里我判断了服务中结束时间是否为空。如果结束时间为空,开始时间不为空,我会默认查询一年的数据。

  2.根据名称进行模糊查询。

  继续。像concat (% , content, %) 3这样的内容。最后根据查出来的总数据筛选类型。

  IF(:category不为空,a.category=:category不为空,1=1)小结一下:

  1.其实就是一个简单的分页条件查询。因为不熟悉jpa语法,浪费了很多时间。希望能帮助到更多的人。

  2.暂时不知道怎么排序。无论是传入pageable中的排序,还是在sql的末尾进行排序,都会得到一个错误。如果有大老板知道,可以点一下。

  

目录

@ Query(value= SELECT * FROM count _ entity where id=-1111 union(SELECT * FROM count _ entity where video _ name=?1、platform=腾讯视频 ORDER BY click_date DESC限制?2) UNION (SELECT * FROM count _ entity其中video_name=?1和platform=爱奇艺 ORDER BY click_date DESC限制?2) UNION (SELECT * FROM count _ entity其中video_name=?1和platform=芒果TV ORDER BY click_date DESC限制?2),nativeQuery=true)空数据查询需要连接在union前面,因为Union的第一个查询不能使用()

 

  以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: