Hibernate Criteria в запросе списка

У меня 2 класса. В вагоне первого класса есть список пассажиров. Мне нужен критерий гибернации, который вернет автомобиль, для которого у меня есть один пассажир. Итак, что-то вроде этого

class Car {

   @Id
   private Long id;
   @OneToMany
   private List<Passenger> passengers;
}

И в классе Hibernate

@Override
public Car retrieve(Passenger passenger) {
    Criteria criteria = super.createCriteria();
    criteria.add(Restrictions.eq("passengers", passenger));
    return (Car  ) criteria.uniqueResult();
}

Однако приведенное ниже действительно не работает. Итак, любые предложения, как это сделать


person Boris Horvat    schedule 30.09.2012    source источник


Ответы (1)


Здесь вам нужно соединить таблицу Car с таблицей Passenger, что можно сделать с помощью псевдонимов API критериев. вам следует попробовать следующее:

@Override
public Car retrieve(Passenger passenger) {
    Criteria criteria = super.createCriteria();
    criteria.createAlias("passengers", "p");
    criteria.add(Restrictions.eq("p.id", passenger.getId()));
    return (Car) criteria.uniqueResult();
}

Еще один совет: я думаю, что пассажир может появиться в машине только один раз, поэтому я бы предпочел Set<Passenger> вместо List<Passenger>.

person szegedi    schedule 30.09.2012
comment
Tnx за правильный и быстрый ответ (как и за отзыв), буду иметь в виду, что это точно. ваше здоровье - person Boris Horvat; 30.09.2012