2010-09-14 3 views
3
@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; 
    } 

Допустим, у меня есть Языки Eng Germ, Люди, кто говорит анг, люди, которые говорят на немецком, и люди, которые говорят Eng и немецкий Я хочу, чтобы все люди, кто говорит и Английский и немецкий, используя критерии.Критерии Многие ко многим Hibernate

crit.createAlias("languages", "l"); 
Conjunction con = Restrictions.conjunction(); 
for (int j = 0; j < o.length; j++) { 
      Criterion tmp = Restrictions.eq("l.id", ((Languages)o[j]).getId()); 
     con.add(tmp); 
} 
crit.add(con); 


select 
this_.id as y0_, 
    this_.lastName as y1_, 
    this_.firstName as y2_, 
    this_.socialNumber as y3_ 
from 
    Person this_ 
inner join 
    link_person_languages languages3_ 
     on this_.id=languages3_.Person_id 
inner join 
    Languages l1_ 
     on languages3_.languages_id=l1_.id 
where 
    (
     l1_.id=? 
     and l1_.id=? 
    ) 

ответ

0

Изнутри объект DAO, который имеет доступ к сеансу объект (возможно, тот, который простирается HibernateDaoSupport):

Criteria criteria = getSession().createCriteria(Person.class); 
criteria = criteria.createCriteria("languages"); 

Criterion languageEN = Restrictions.eq("name", "en"); 
Criterion languageDE = Restrictions.eq("name", "de"); 
criteria.add(Restrictions.and(languageEN, languageDE)); 

List<Person> result = criteria.list(); 
+0

это будет список всех людей, о которых говорит анг, и все люди, о которых говорит Ger , а также все люди, говорящие на обоих языках, то, что мне нужно, это критерии, которые будут выбирать только более поздние, люди, которые говорят на английском и немецком языках. – Darwly

+0

Ahh .. чем вам нужно, а не OR: criteria.add (Restrictions.and (languageEN, languageDE)); – Ice

+0

, который тоже не работает, плохо получить sql – Darwly

Смежные вопросы