我這裏有兩個休眠實體註釋:如何使這個select *從兩個連接表中查詢HQL形式?
@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具有到客戶端主鍵(PK_CLIENT)的外鍵(FK_CLIENT)。
我想在HQL的形式執行此查詢:
select * from ACCOUNT a inner join CLIENT b on a.FK_CLIENT = b.PK_CLIENT
這意味着,從客戶和用戶實體的所有屬性將被選中。
任何人都知道如何使用HQL形式進行查詢?
AFAIK,在HQL中我們只能選擇一個實體。
注:
我不能使用@ManyToOne映射帳戶實體,因爲已經有fkClient財產,這是因爲GET/setFkClient已經用在別的地方我不能改變。
上述代碼已通過刪除無關部分以簡化閱讀而得到簡化。如果您發現錯字,請在評論部分讓我知道,因爲我手動鍵入了代碼。
如果你不能做一個映射告訴Hibernate,這兩個是相關的,則Hibernate也幫不了你。您必須首先選擇您的「Account」對象,然後從它們中創建一個'Client' ID,並進行另一次選擇。無論如何,這不是hibernate的工作原理,請閱讀[簡單關係](http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html)。你的'Account'需要引用一個'Client' _object_,**而不是**外鍵。然後從數據庫填充該對象引用是hibernate的工作。 – 2013-03-28 08:32:47
呵呵,所以用hibernate完全沒有解決方案?我不能添加映射而不破壞其他代碼。 – null 2013-03-28 08:43:06