Hibernate HQL pour rejoindre les non-cartographiée tables
J'ai une entité appelée "Kurs":
@Entity
public class Kurs {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long kursId;
private String name;
//Accessors....
}
Et aussi une entité appelée "Kategori":
@Entity
public class Kategori {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long kategoriId;
private String name;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable (name = "KursKategori", joinColumns = {@JoinColumn(name = "kategoriId")}, inverseJoinColumns = {@JoinColumn(name = "kursId")})
private List<Kurs> kursList;
//Accessors....
}
Maintenant, je suis en train de construire un KursDao
qui ont une méthode pour récupérer une liste de Kurs
par le kategoriId
, mais je ne suis pas en mesure d'obtenir le rejoindre pour travailler pour moi.
Utilisé pour SQL, normalement j'pense que la requête devrait ressembler à ceci:
getHibernateTemplate().find("from Kurs as k INNER JOIN KursKategori kk ON k.kursId = kk.kursId AND kk.kategoriId = ?", kategoriId);
Mais cela ne fonctionne pas et je ne peux pas trouver quelque chose comme cela fonctionne. Je ne veux pas créer une classe de la KursKategori
puisque c'est seulement une table de mappage de toute façon.
Est-il un moyen de rejoindre la non-cartographiée table KursKategori
à la table mappée kurs
de sorte que je vais seulement le Kurs
qui est dans la bonne Kategori
?
- Quelle est l'erreur que vous obtenez? Comment est votre base de données déployée?
- jeton inattendu: SUR près de la ligne 1, colonne 67 [de pas de.dahlsdata.de modèle.Kurs.Kurs comme k INNER JOIN KursKategori kk SUR k.kursId = kk.kursId ET kk.kategoriId = ?]
- Il ne marche pas comme SUR mon mot clé. J'ai aussi essayé différentes variantes. E. g. l'utilisation de l'ancienne rejoindre (à partir de kurs k, kurskategori kk où kk.kursId=k.kursId et kk.kategoriId = ?) mais cela donne juste une erreur qui kurskategori n'est pas tracé. Mais je ne veux pas de carte kurskategori. Je veux juste rejoindre mon kurs contre elle.
Vous devez vous connecter pour publier un commentaire.
Dans les requêtes HQL vous ne pouvez rejoindre sur les relations entre les entités. Cependant, vous avez une telle relation, de sorte que vous pouvez l'utiliser:
Depuis Hibernate 5.1 vous pouvez JOINDRE les entités projetées sans association.
Donc, cela devrait fonctionner maintenant:
Vous ne pouvez pas faire de requête HQL sur KursKategori , un tableau qui n'est pas mappé dans hibernate..
Soit vous pouvez exécuter des requêtes sql grâce à hibernate de modèle ou d'une requête à quelque chose comme ceci
Vous pouvez créer une requête de ce type et de travail.