繁体   English   中英

如何从HQL表单中的两个连接表查询中选择*?

[英]How to make this select * from two joined tables query in HQL form?

我在这里有两个带有注释的hibernate实体:

@Entity
@Table(name = "CLIENT")
public class Client {

    private Long pkClient;
    private String name;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="PK_CLIENT")
    public Long getPkClient() {
        return pkClient;
    }
    public void setPkClient(Long pkClient) {
        this.pkClient = pkClient;
    }

    @Column(name="NAME")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    ...
}

@Entity
@Table(name="ACCOUNT")
public class Account {

    private Long pkClientAccount;
    private Long fkClient;
    private String accountNo;

    @Id
    @Column(name="PK_CLIENT_ACCOUNT")
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getPkClientAccount() {
        return pkClientAccount;
    }
    public void setPkClientAccount(Long pkClientAccount) {
        this.pkClientAccount = pkClientAccount;
    }

    @Column(name="FK_CLIENT")
    public Long getFkClient() {
        return fkClient;
    }
    public void setFkClient(Long fkClient) {
        this.fkClient = fkClient;
    }

    @Column(name="ACCOUNT_NO")
    public String getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(String accountNo) {
        this.accountNo = accountNo;
    }

    ...
}

这种关系是一对多,客户有很多帐户。 表ACCOUNT具有到表CLIENT的主键(PK_CLIENT)的外键(FK_CLIENT)。

我想以HQL格式执行此查询:

select * from ACCOUNT a inner join CLIENT b on a.FK_CLIENT = b.PK_CLIENT

这意味着,将选择来自帐户和客户实体的所有属性。

任何人都知道如何以HQL形式进行查询?

AFAIK,在HQL中我们只能选择一个实体。

注意:
我不能在Account实体中使用@ManyToOne映射,因为已经有fkClient属性而且我无法更改它,因为get / setFkClient已经在其他地方使用过。

通过删除不相关的部分来简化上面的代码,使其更易于阅读。 如果您发现拼写错误,请在评论部分告诉我,因为我手动输入了代码。

是的,您可以使用HQL选择多个实体。 Hibernate将返回Object[].类型的数组Object[].

select 
    account, 
    client 
from Account account, Client client 
where account.fkClient = client.pkClient

使用Hibernate 5.1 ,即使映射不镜像数据库表关系,现在也可以加入实体。

所以,这个HQL查询在Hibernate 5.1中是有效的:

select 
    account, 
    client 
from Account account 
join Client client on account.fkClient = client.pkClient

尝试使用HQL

select account from Account account, Client client where account.fkClient = client.pkClient

有关更多详细信息,请参阅Hibernate参考文档http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/queryhql.html#queryhql-where

您可以使用:

select * from  TB_1 as a 
left join  TB_2 as b 
on a.ID_TB_1 = b.ID_TB_2 and b.ID_TB_2 is null 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM