2011-10-09 25 views
1

我有以下實體如何編寫設置集合的Hibernate查詢

@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 

回答

0

這應該可以通過使用帶有CRITERIA的Hibernate ASSOCIATION來實現。雖然你看起來接近正確(雖然我不確定你爲什麼使用DetachedCriteria,而不是簡單的Criteria),但你應該參考這個 - http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html#querycriteria-associations - 來更多地瞭解如何構建這樣的查詢。

+0

我已經通過提供的鏈接...但由於我是休眠的新手,我無法按照文檔..所以我試圖通過做... ...你可以讓我知道查詢哪些我可以在這裏使用 –

+0

好的。你上面試過的查詢有什麼問題? – Saket

+0

它給出了以下錯誤......「沒有爲參數2指定值」 –

0

試試這個:

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

其中languageNames是語言名稱的集合。 如果您遇到無法解決「語言」的錯誤,請添加新的別名。

相關問題