Я очень незнаком с SQL / HQL, и в настоящее время я застрял с этой «возможно» простой проблемой:
У меня есть два объекта «многие ко многим» с таблицей отношений:
Автомобиль, проблема с машиной и проблема.
У одной машины может быть много проблем,
Одна проблема может появиться во многих автомобилях,
CarProblem - это таблица ассоциации с другими свойствами.
Теперь я хочу найти автомобили с указанной проблемой, как мне написать такой HQL?
Все идентификаторы типа Long.
Я пробовал много комбинаций соединения / внутреннего соединения, но все тщетно.
- обновлено:
Извините, не забудьте упомянуть:
Автомобиль имеет много CarProblem
У проблемы много CarProblem
Автомобиль и Проблема не связаны напрямую в Java Object.
- обновить, код Java ниже -
@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);
}
}
Модель из игры! Framework, поэтому все эти свойства являются общедоступными.