Je suis très familier avec SQL/HQL, et je suis actuellement coincé avec ce « peut-être » problème simple:Hibernate HQL m: n rejoindre problème
J'ai deux beaucoup à plusieurs entités, avec une table de relation:
Voiture, CarProblem et Problème.
une voiture peut avoir de nombreux problèmes,
Un problème peut apparaître dans de nombreuses voitures,
CarProblem est la table d'association avec d'autres propriétés.
Maintenant, je veux trouver Car (s) avec problème spécifié, comment puis-je écrire un tel HQL? Tous les identifiants sont de type long.
J'ai essayé beaucoup de rejoindre/intérieur-join combinaisons, mais en vain ..
- Mise à jour:
Désolé, oubliez pas de mentionner:
voiture a beaucoup CarProblem
problème a beaucoup CarProblem
voiture et problème ne sont pas connectés directement à Java Object.
- mise à jour, le code java ci-dessous -
@Entity
public class Car extends Model{
@OneToMany(mappedBy="car" , cascade=CascadeType.ALL)
public Set<CarProblem> carProblems;
}
@Entity
public class CarProblem extends Model{
@ManyToOne
public Car car;
@ManyToOne
public Problem problem;
... other properties
}
@Entity
public class Problem extends Model {
other properties ...
// not link to CarProblem , It seems not related to this problem
// **This is a very stupid query , I want to get rid of it ...**
public List<Car> findCars()
{
List<CarProblem> list = CarProblem.find("from CarProblem as cp where cp.problem.id = ? ", id).fetch();
Set<Car> result = new HashSet<Car>();
for(CarProblem cp : list)
result.add(cp.car);
return new ArrayList<Car>(result);
}
}
Le modèle est de Play! cadre, de sorte que ces propriétés sont toutes publiques.
Afficher votre code/mappage –