Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回空结果的复杂sql查询_Java_Mysql_Sql_Hibernate_Join - Fatal编程技术网

Java 返回空结果的复杂sql查询

Java 返回空结果的复杂sql查询,java,mysql,sql,hibernate,join,Java,Mysql,Sql,Hibernate,Join,我的数据库看起来像这样 tickets table ------------- ticket_id title description department_id status_id priority_id assignee_id creator_id departments table ------------------ dep_id dep_name status table ------------ status_id status_name priority table ----

我的数据库看起来像这样

tickets table
-------------
ticket_id
title
description
department_id
status_id
priority_id
assignee_id
creator_id

departments table
------------------
dep_id
dep_name

status table
------------
status_id
status_name

priority table
---------------
pr_id
pr_name

users table
-----------
u_id
username
password
salt
email
firstName
lastName
department_id
userlevel_id

userlevels table
-----------------
ul_id
ul_name
SQLQuery q = q.createSQLQuery("SELECT t.*,d.*,s.*,p.*,u.*,a.* FROM tickets t, departments d, status s, priority p, users u, attachments a WHERE t.department_id=d.dep_id AND t.status_id=s.stat_id AND t.priority_id=p.pr_id AND t.assignee_id=u.u_id AND t.creator_id=u.u_id AND t.tick_id=a.ticket_id AND assignee_id=?");

    q.setInt(0, some_valid_assignee_id);
    List<Object> result = q.list();
我需要加载给定asignee id的所有票证。我的查询如下所示

tickets table
-------------
ticket_id
title
description
department_id
status_id
priority_id
assignee_id
creator_id

departments table
------------------
dep_id
dep_name

status table
------------
status_id
status_name

priority table
---------------
pr_id
pr_name

users table
-----------
u_id
username
password
salt
email
firstName
lastName
department_id
userlevel_id

userlevels table
-----------------
ul_id
ul_name
SQLQuery q = q.createSQLQuery("SELECT t.*,d.*,s.*,p.*,u.*,a.* FROM tickets t, departments d, status s, priority p, users u, attachments a WHERE t.department_id=d.dep_id AND t.status_id=s.stat_id AND t.priority_id=p.pr_id AND t.assignee_id=u.u_id AND t.creator_id=u.u_id AND t.tick_id=a.ticket_id AND assignee_id=?");

    q.setInt(0, some_valid_assignee_id);
    List<Object> result = q.list();

但它返回的是一个空的对象列表。谁能给我指一下正确的方向,谢谢

您应该使用正确的连接语法。使查询更易于阅读和编写

然而,我猜问题在于:

t.assignee_id = u.u_id AND t.creator_id = u.u_id
这将假定

t.assignee_id = t.creator_id
也许在您的数据中从未发生过这种情况。

在您的查询中,您有和t.assignment\u id=u.u\u id以及和t.creator\u id=u.u\u id。返回任何记录的唯一方法是如果assignment\u id和creator\u id相同。我认为您真正需要做的是链接到users表两次,如下所示:

SELECT t.*, d.*, s.*, p.*, u1.*, u2.*, a.* 
FROM tickets t
  INNER JOIN departments d ON t.department_id = d.dep_id 
  INNER JOIN status s ON t.status_id = s.stat_id 
  INNER JOIN priority p ON t.priority_id = p.pr_id 
  INNER JOIN users u1 ON t.assignee_id = u.u_id 
  INNER JOIN users u2 ON t.creator_id = u.u_id 
  INNER JOIN attachments a ON t.tick_id = a.ticket_id 
WHERE assignee_id = ?