项目使用jpa规范

其中既可使用面对对象查询(jpql语句)

又可使用原生sql查询;

1.(经后期验证,jpql都可以)

其中有一个区别是:

jpql查询字段为空:  " cr.owner.id   = null  "

sql查询字段为空:  " cr.owner_id is null "

2.

//下面这个service方法查询的是实体bean,jpql语句,而不是原生sql语句
Long recordId = (Long) commonService.excuteSql(minidSql, ExecuteType.SINGLE_RESULT);// 统计当前查询最小的资源id
this.getEntityManager().createQuery(jpql).getResultList(); //下面这个service方法查询的是原生sql语句
getEntityManager().createNativeQuery(sql).getResultList();

3.

在涉及到多表联合查询的时候,

我写的jpql语句:

   select distinct(cr) from CustomerResource as cr where =
and cr.domain.id =
and cr.owner.department.id in
(, , , , , , , , , , , , , )
or cr.owner is null
order by cr.id

经过jpa规范转化后的原生sql语句是:

SELECT DISTINCT t0.ID AS a1, t0.AUDITAMOUNT AS a2, t0.BIRTHDAY AS a3, t0.BORROWMONEY AS a4, t0.BORROWTIME AS a5,
t0.CALL_ID AS a6, t0.CARDNO AS a7, t0.COUNT AS a8, t0.CUSTOMERQUALIFICATIONRECORD AS a9, t0.CUSTOMER_SOURCE AS a10,
t0.EXPIREDATE AS a11, t0.IMPORTDATE AS a12, t0.INVESTMONEY AS a13, t0.INVESTPRODUCT AS a14, t0.INVESTRECORD AS a15,
t0.LASTDIALDATE AS a16, t0.NAME AS a17, t0.NOSIGNTIME AS a18, t0.NOTE AS a19, t0.REPAYSTATUS AS a20,
t0.SERVICE_RECORD_STATUS_ID AS a21, t0.SETTLEMENTDATE AS a22, t0.SEX AS a23, t0.STORECITYNAME AS a24, t0.STORENAME AS a25,
t0.STOREPROVICENAME AS a26, t0.USER_ID AS a27, t0.USER_NAME AS a28, t0.ACCOUNTMANAGER_ID AS a29, t0.COMPANY_ID AS a30,
t0.CUSTOMERLEVEL_ID AS a31, t0.DOMAIN_ID AS a32, t0.OWNER_ID AS a33, t0.DEFAULTADDRESS_ID AS a34
FROM ec2_customer_resource t0,
ec2_user t1 WHERE
((((( = ) AND (t0.DOMAIN_ID = )) AND (t1.department_id IN (, , , , , , , , , , , , , ) ))
OR (t0.OWNER_ID IS NULL))
AND (t1.ID = t0.OWNER_ID))
ORDER BY t0.ID LIMIT OFFSET

大家可以看到,倒数第二排被我加粗倾斜的语句,这个是jpa规范自动帮我加上去的,

但是我想查询的数据里面t0.OWNER_ID是可以为空的,

t1.ID是不可能为空的;

这就导致了查询数据的丢失;

解决办法:


cr.owner.department.id in
(, , , , , , , , , , , , , )

根据这里的部门id,先查询出部门管辖下的用户id,然后用

cr.owner.id in (*,*,*,*,*,*) or cr.owner is null 

这样解析后生成的sql语句是没有联表的;

 

over...

jpql和sql的区别的更多相关文章

  1. JPQL和SQL的比较

    前言 在JAVA EE中,JPQL是专门为Java 应用程序访问和导航实体实例设计的.Java Presistence Query Language(JPQL),java持久性查询语言.它是JPA规范 ...

  2. SpringData JPA进阶查询—JPQL/原生SQL查询、分页处理、部分字段映射查询

    上一篇介绍了入门基础篇SpringDataJPA访问数据库.本篇介绍SpringDataJPA进一步的定制化查询,使用JPQL或者SQL进行查询.部分字段映射.分页等.本文尽量以简单的建模与代码进行展 ...

  3. HiveQL(HiveSQL)跟普通SQL最大区别一直使用PIG,而今也需要兼顾HIVE

    HiveQL(Hive SQL)跟普通SQL最大区别 一直使用PIG,而今也需要兼顾HIVE.网上搜了点资料,感觉挺有用,这里翻译过来.翻译估计不太准确,待自己熟悉HIVE后再慢慢总结. * No t ...

  4. pl/sql和sql的区别

    源地址:https://zhidao.baidu.com/question/187511430.html 1 sql(数据定义语言) 和PL/Sql的区别:答:SQL是结构化查询语言,比较接近自然语言 ...

  5. MongoDB 1: NoSQL 和 SQL的区别

    导读:本篇博客,主要是结合自己在项目中的使用,简单的阐述一下NoSQL和SQL的区别.那么,根据自己的应用,NoSQL这边,选择的是MongoDB(Redis虽然也是,但属于内存存储,这里不予说明). ...

  6. 为什么使用Nosql:Nosql和SQL的区别

    1.概念: SQL(Structured Query Language)数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not O ...

  7. My SQL 和SQL Server区别

    MySQL 与SQL Server区别 今天了解了二者区别,整理网上查阅资料,总结列举如下: MSSQL == SQL server 是sybase与微软合作时期的产物. 对于程序开发人员而言,目前使 ...

  8. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系

    java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp区别和联系 栏目:Java基础 作者:admin 日期:2015-04-19  ...

  9. 86标准SQL与92标准SQL用法区别

    86标准SQL与92标准SQL用法区别 在开发Oracle 9i时, 数据库还时间了ANSL SQL/92标准的链接语法, 在书中建议在使用Oracle 9i及更高版本时,应该使用SQL/92标准的语 ...

随机推荐

  1. 【poj3016】 K-Monotonic

    http://poj.org/problem?id=3016 (题目链接) 题意 给出一个数列,将一个数${a_i}$更改为${b_i}$的代价为${|a_i-b_i|}$.求将数列改为不递减的最小代 ...

  2. Java之Object类和常用的API

    Object类和常用的API 学习过程中的笔记,涉及到Objetc中的equals方法和toString方法,日期类Date,日历类Calendar,日期格式化类SimpleDateFormat以及基 ...

  3. Luogu 1063 能量项链(动态规划)

    Luogu 1063 能量项链(动态规划) Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某 ...

  4. 【THUSC2017】杜老师

    题目描述 杜老师可是要打+∞年World Final的男人,虽然规则不允许,但是可以改啊! 但是今年WF跟THUSC的时间这么近,所以他造了一个idea就扔下不管了…… 给定L,R,求从L到R的这R− ...

  5. kernel-init-bash

    https://www.kernel.org/doc/Documentation/kernel-parameters.txthttp://unix.stackexchange.com/question ...

  6. poj 3294 后缀数组 多字符串中不小于 k 个字符串中的最长子串

    Life Forms Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16223   Accepted: 4763 Descr ...

  7. 编译geth报错的解决方法 make: *** [geth] 错误 1

    在centos下安装了go1.9.1版本,编译go-ethereum时报错: [root@localhost go-ethereum]# make gethbuild/env.sh go run bu ...

  8. img、列表和table标签

    一.img图片 <body> <a href="https://www.fmtxt.com"> <img src="images/1.jpg ...

  9. Hadoop基础-HDFS的API实现增删改查

    Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...

  10. RabbitMQ基础介绍

    非原创,仅作为个人的学习资料,转自 anzhsoft http://blog.csdn.net/anzhsoft/article/details/19563091, 1. 历史 RabbitMQ是一个 ...