Hibernate:如何使用HQL选择空对象?

时间:2015-07-10 07:46:46

标签: java sql hibernate

我有以下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选择所有数据?

3 个答案:

答案 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