Ho avuto due entità Hibernate qui con annotazione:Come rendere questa selezione * da due query di tabelle unite in forma 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;
}
...
}
La relazione è uno-a-molti, che un cliente ha molti account. La tabella ACCOUNT ha una chiave esterna (FK_CLIENT) per la tabella della chiave primaria del CLIENT (PK_CLIENT).
voglio eseguire questa interrogazione in forma HQL:
select * from ACCOUNT a inner join CLIENT b on a.FK_CLIENT = b.PK_CLIENT
Questo significa, verranno selezionati tutti oggetti di account e l'entità del client.
Qualcuno sa come fare quella query in forma HQL?
AFAIK, in HQL possiamo selezionare solo un'entità.
Nota:
non posso utilizzare la mappatura @ManyToOne in entità account perché non v'è già di proprietà fkClient e non posso cambiare questo perché il get/setFkClient è già stato utilizzato in altri luoghi.
Il codice sopra è stato semplificato rimuovendo parti non correlate per facilitare la lettura. Se trovi un refuso, fammelo sapere nella sezione commenti poiché ho digitato il codice manualmente.
Se non è possibile fare una mappatura per dire ibernazione che quei due sono legati quindi di ibernazione non può aiutare. Dovresti prima selezionare i tuoi oggetti Account', quindi creare un 'Collection' di' Client' id da loro e fare un'altra selezione. In ogni caso, non è così che funziona l'ibernazione, si legge su [semplici relazioni] (http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html). Il tuo "Account" deve avere un riferimento a una chiave esterna "Client' _object_, ** not **. È quindi il lavoro di ibernazione per popolare tale riferimento oggetto dal database. –
duh, quindi nessuna soluzione con ibernazione? Non riesco ad aggiungere mappature senza rompere altri codici. – null