我有以下实体
@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;
}
我的语言表如下所示
我想选择名字以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 :(得分:0)
使用Hibernate ASSOCIATION和CRITERIA可以实现这一点。虽然你看起来接近正确(虽然我不确定你为什么使用DetachedCriteria,而不是简单的Criteria),你应该参考这个 - http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html#querycriteria-associations - 来更多地了解如何构建这样的查询。
答案 1 :(得分:0)
试试这个:
criteria.add(Restrictions.in("languages.name",languageNames));
其中languageNames是语言名称的集合。 如果您遇到无法解决“语言”的错误,请添加新别名。