РЕДАКТИРОВАТЬ> я зашел в тупик ... так что я могу продолжать искать основную причину .. Пожалуйста, скажите мне, как сделать простой критерий для многих для многих отношений, которые имеют более одного ограничения eq, например Как заставить человека говорить на английском и немецком в примере, показанном здесь ...
У меня такая ситуация: у меня два класса человек и язык с отношениями n, m ... И я использую критерии для поиска - найдите всех людей, которые говорят на бывшем. Английский и немецкий
@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();
И забавно то, что, если я установлю его только для одного языка, я получу правильный список людей, но для более чем одного языка я не получу ни одного, я перепроверил свою базу и специально назначил одного человека говорить на двух языках , Но больше всего мне подсказывает, что в результате проекции в объекте [] на место, где должны быть заданы языки, есть значение NULL ......
пожалуйста, помогите
Тпй