Как написать Hibernate запрос для коллекции Set - PullRequest
1 голос
/ 09 октября 2011

У меня есть следующая сущность

@Entity
public class Employee{

    private Integer id;
    private String name;
    private String address;
    private Date created;
    @OneToMany(mappedBy = "employee")
    private Set<Language> languages = new HashSet<AlbumUser>()
}

и языковой объект

  @Entity
    public class Language{

    private String name;
    @ManyToOne
    @JoinColumn(name = "employee_id") 
    private Employee employee;
}

моя языковая таблица выглядит следующим образом

enter image description here

Я хочу выбрать всех сотрудников, чье имя начинается с A и кто знает java и C, и для этого я пытаюсь выполнить

DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class,"employee");
 criteria.add( Restrictions.ilike("name", "A%") );
 criteria.add(Restrictions.in("languages",languageSet));
 return getHibernateTemplate().findByCriteria(criteria)

где languageSet равен

Set<Language> languageSet = new HashSet();
languageSet.add(new Language("Java"));
languageSet.add(new Language("C"));

Я вижу, что моя попытка совершенно неверна ... Я новичок в спящем режиме, может кто-нибудь, пожалуйста, помогите мне с этим ..

Caused by: java.sql.SQLException: No value specified for parameter 2
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2176)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2100

Ответы [ 2 ]

0 голосов
/ 27 сентября 2012

Попробуйте:

criteria.add(Restrictions.in("languages.name",languageNames));

, где languageNames - это коллекция имен языков.Если у вас есть ошибка, что «языки» не могут быть решены, добавьте новый псевдоним.

0 голосов
/ 09 октября 2011

Это должно быть достижимо при использовании Hibernate ASSOCIATION с CRITERIA.Хотя вы смотрите близко к правильному (хотя я не уверен, почему вы используете DetachedCriteria, а не простой Criteria), вам следует обратиться к этому - http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html#querycriteria-associations - чтобы узнать больше о том, как следует создавать такие запросы.

...