Comment faire cela, sélectionnez * à partir de deux tables jointes requête HQL forme?
J'ai eu deux hibernate entity ici avec l'annotation:
@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 relation de un-à-plusieurs qui un Client a de nombreux Compte. Comptes de la Table a la clé étrangère (FK_CLIENT) à la table du CLIENT est la clé primaire (PK_CLIENT).
Je veux effectuer cette requête HQL forme:
select * from ACCOUNT a inner join CLIENT b on a.FK_CLIENT = b.PK_CLIENT
- Ce que cela signifie, toutes les propriétés de Compte et le Client entité sera sélectionné.
Ce que quelqu'un sait comment faire pour que la requête HQL forme?
Autant que je sache, dans les requêtes HQL nous ne pouvez sélectionner qu'une seule entité.
Remarque:
Je ne peux pas utiliser @ManyToOne de cartographie en Compte de l'entité, car il est déjà fkClient bien et je ne peux pas changer cela parce que le get/setFkClient a déjà été utilisé dans d'autres endroits.
Le code ci-dessus a été simplifiée par la suppression sans rapport avec les pièces pour les rendre plus faciles à lire. Si vous trouvez une erreur, s'il vous plaît laissez-moi savoir dans la section commentaire depuis que j'ai tapé le code manuellement.
- Si vous ne pouvez pas faire une cartographie à dire d'hibernate que ces deux sont liés alors hibernate ne peut pas vous aider. Vous devez d'abord sélectionner votre
Account
les objets, puis créer unCollection
deClient
id d'eux et de faire une autre sélection. En tout cas, ce n'est pas comment hibernate œuvres, lire sur les relations simples. VotreAccount
doit avoir une référence à unClient
objet, pas clé étrangère. C'est le travail de hibernate pour remplir cet objet de référence de la base de données. - euh, donc pas de solution à tous avec mise en veille prolongée? Je ne peux pas ajouter un mappage sans casser d'autres codes.
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez sélectionner plusieurs entités avec HQL.
Hibernate va retourner un tableau de type
Object[].
Avec Hibernate 5.1, il est maintenant possible de joindre des entités, même si la cartographie n'est pas un miroir de la table de base de données relation.
Donc, cette requête HQL est valable de mise en veille prolongée 5.1:
Essayez de suivre les requêtes HQL
Pour plus de détails, veuillez vous référer à Hibernate de la documentation de référence
http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/queryhql.html#queryhql-where
Vous pouvez utiliser: