我有以下select
声明
"SELECT new SystemUser(u.id, u.username, u.fullname, u.status, u.group.id, u.group.name, u.organization.id, u.organization.name) FROM SystemUser"
POJO的
public class SystemUser implements Serializable {
private long id;
private String username;
private String password;
private String fullname;
private SimpleStatus status;
private UserGroup group;
private Organization organization;}
我希望从SystemUser
表中选择所有数据,但不选择“SystemUser”没有“group”或“organization”的行。
如何使用HQL选择所有数据?
答案 0 :(得分:1)
您使用的是构造函数查询select new SystemUser(...) from SystemUser
。这将根据您选择的列构造新对象。我认为这没有必要,你可以简单地写select u from SystemUser u
。
甚至更简单(但不推荐,因为这不符合JPQL):from SystemUser
答案 1 :(得分:0)
FROM SystemUser WHERE group IS NULL OR organization IS NULL
应该可以正常工作。
答案 2 :(得分:0)
我从不尝试过,但是在JPQL-HQL documentation之后我认为你可以这样做(不确定case语句是否可以返回空值或只是空字符串):
SELECT new SystemUser(
u.id, u.username, u.fullname, u.status,
CASE
WHEN u.group IS NOT NULL THEN u.group.id
ELSE NULL,
CASE
WHEN u.group IS NOT NULL THEN u.group.name
ELSE NULL,
CASE
WHEN u.organization IS NOT NULL THEN u.organization.id
ELSE NULL,
CASE
WHEN u.organization IS NOT NULL THEN u.organization.name
ELSE NULL,
)
FROM User u