有一个要求,我应该使用 jpa 本机查询(因为 jpa 不支持 timestampdiff 函数)。
另外我应该选择同一个表两次,例如:我有表:个人、任务等
我使用的原生查询是:“select emp.name, tsk.name, app.name, from Individual emp, Task tsk, Individual app where ......”</ p>
我想要的预期数据是:“Tom,task1,Jack”,但是给定这个本机 sql 查询,结果数据是“Jack,task1,Jack”。这意味着 app.name 会覆盖 emp.name。
如果我想得到正确的结果,我必须使用如下查询:“select emp.name, tsk.name, (select app.name from Individual app where xx.id=xx.id), from Individual emp, Task tsk , 个人应用程序在哪里......”
本机查询代码(获取错误数据):
String nativeSql = "select con.first_name, app.first_name from Individual con, Task tsk, TimeBlock tb, Timesheet ts, Individual app where con.id=ts.owner_id and tb.timesheet_id=ts.id and tb.task_id=tsk.id and tsk.approver_id=app.id";
Query query = entityManager.createNativeQuery(nativeSql);
本机查询代码(可以获得正确的数据):
String nativeSql = "select con.first_name, (select app.first_name from Individual app where tsk.approver_id=app.id) from Individual con, Task tsk, TimeBlock tb, Timesheet ts, Individual app where con.id=ts.owner_id and tb.timesheet_id=ts.id and tb.task_id=tsk.id and tsk.approver_id=app.id";
Query query = entityManager.createNativeQuery(nativeSql);
jpql查询代码:
String jpql = "select con.firstName, app.firstName from Individual con, Task tsk, TimeBlock tb, Timesheet ts, Individual app where con.id=ts.owner.id and tb.timesheet.id=ts.id and tb.task.id=tsk.id and tsk.approver.id=app.id";
Query query = entityManager.createQuery(jpql);
但有趣的是:
我使用这个本机 sql 查询从 mysql db 搜索(使用命令行、工作台等),结果数据是正确的“Tom,task1,Jack”
如果我在没有 timestampdiff 功能的情况下使用 jpql 来满足此要求,则结果数据也是正确的。
刚试了jdbc,如果我在jdbc中使用本机sql查询,我也可以得到正确的数据。
jpa似乎有些问题....
因此,任何以前遇到过此类问题并知道其本质的人。
谢谢你的帮助。