5

ここには、注釈付きの 2 つの休止状態のエンティティがありました。

@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;
    }

    ...
}

関係は、クライアントが多数のアカウントを持つ 1 対多です。表 ACCOUNT には、表 CLIENT の主キー (PK_CLIENT) への外部キー (FK_CLIENT) があります。

このクエリを HQL 形式で実行したい:

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

つまり、アカウントおよびクライアント エンティティのすべてのプロパティが選択されます。

そのクエリを HQL 形式で作成する方法を知っている人はいますか?

私の知る限り、HQL では 1 つのエンティティしか選択できません。

注:
fkClient プロパティが既に存在するため、Account エンティティで @ManyToOne マッピングを使用できません。また、get/setFkClient が他の場所で既に使用されているため、これを変更できません。

上記のコードは、読みやすくするために無関係な部分を削除して単純化されています。タイプミスを見つけた場合は、コードを手動で入力したため、コメント セクションでお知らせください。

4

4 に答える 4

17

はい、HQL で複数のエンティティを選択できます。Hibernate は型の配列を返しますObject[].

select 
    account, 
    client 
from Account account, Client client 
where account.fkClient = client.pkClient
于 2013-03-28T08:47:39.603 に答える
0

以下を使用できます。

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 
于 2016-02-11T13:33:57.257 に答える
0

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を参照してください。

于 2013-03-28T08:45:35.930 に答える