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)

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
4

2 に答える 2

0

これを試して:

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

ここで、languageNamesは言語名のコレクションです。「言語」を解決できないというエラーがある場合は、新しいエイリアスを追加してください。

于 2012-09-27T01:23:23.970 に答える
0

これは、Hibernate ASSOCIATION と CRITERIA を使用して達成できるはずです。ほぼ正しいように見えますが (単純な Criteria ではなく DetachedCriteria を使用している理由がわかりません)、これを参照する必要があります - http://docs.jboss.org/hibernate/core/3.3/reference/en/ html/querycriteria.html#querycriteria-associations - そのようなクエリをどのように構築するべきかを理解するため。

于 2011-10-09T12:48:02.050 に答える