編集>私は行き止まりになっています...主な理由を探し続けることができます..たとえば、複数のeq制限がある多対多の関係の簡単な基準を作成する方法を教えてください。ここに示す例では、英語とドイツ語を話す人を取得します...
私の状況はこのようなものです。私は2つのクラスの人と言語を持っており、関係があります。そして私は検索を行うための基準を使用しています-元を話すすべての人を取得します。英語とドイツ語
@Entity
public class Person implements Serializable {
private int id;
...........
private Set<Languages> languages = new HashSet<Languages>();
...............
@ManyToMany
@JoinTable(name = "link_person_languages")
public Set<Languages> getLanguages() {
return languages;
}
}
@Entity
public class Languages implements Serializable {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
@Column(nullable = false, length = 40, unique = true)
public String getName() {
return name;
}
基準
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("languages"));
c = enumMap.get(attr);
if (c.isChanged()) {
Criteria crit2 = crit.createCriteria("languages");
Object[] o = (Object[]) c.getAnswer();
Conjunction con = Restrictions.conjunction();
for (int j = 0; j < o.length; j++) {
Criterion tmp = Restrictions.eq("id", ((Languages)o[j]).getId());
con.add(tmp);
}
crit2.add(con);
}
crit.setProjection(projList);
retList = crit.list();
面白いことに、1つの言語だけに設定すると、適切な人のリストが表示されますが、複数の言語には何も表示されないので、ベースを再確認して、2つの言語を話すように1人の人を特別に設定しました。しかし、何よりもヒントとなるのは、Set言語があるべき場所でのObject []の射影の結果、NULL値があるということです......
tnxを助けてください