1

我有以下实体

@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)

语言集在哪里

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
4

2 回答 2

0

这应该可以通过使用带有 CRITERIA 的 Hibernate ASSOCIATION 来实现。虽然你看起来接近正确(虽然我不确定你为什么使用 DetachedCriteria,而不是简单的 Criteria),但你应该参考这个 - http://docs.jboss.org/hibernate/core/3.3/reference/en/ html/querycriteria.html#querycriteria-associations - 了解更多关于如何构建此类查询的信息。

于 2011-10-09T12:48:02.050 回答
0

尝试这个:

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

其中 languageNames 是语言名称的集合。如果您遇到无法解决“语言”的错误,请添加新别名。

于 2012-09-27T01:23:23.970 回答