2011-10-09 26 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是语言名称的集合。 如果您遇到无法解决“语言”的错误,请添加新的别名。

相关问题