2014-04-30 26 views
0

我有這樣的實體:如何有來自多個實體的標準休眠

@Entity 
@Table(name = "titul") 
public class Titul { 
    @OneToMany(mappedBy = "titul") 
    private Set<Autorstvo> autorstvo; 

    @Column (name = "nazov") 
    private String nazov; 
} 

@Entity 
@Table(name = "autorstvo") 
public class Autorstvo { 
    @ManyToOne 
    @JoinColumn(name="id_autor") 
    private Autor autor; 
} 

@Entity 
@Table(name = "autor") 
public class Autor { 
    @Column (name = "meno") 
    private String meno; 

    @OneToMany(mappedBy = "autor") 
    private Set<Autorstvo> autorstvo; 
} 

,我想有通過標準Titul.nazov和Autor.meno SELECT

到目前爲止,我在Hibernate中這樣做:

Criteria critT = session.createCriteria(Titul.class); 

critT.add(Restrictions.like("nazov", titul)); 
critT.createAlias("titul.autorstvo", "autorstvo"); 
critT.createAlias("autorstvo.autor", "autor"); 
critT.add(Restrictions.ilike("autor.meno", autor)); 
    critT.list(); 

但試圖EXECUT critT.list()

我是什麼當d它總是結束錯了嗎?我如何將JOINed標準添加到Hibernate中的標準?

+1

http://stackoverflow.com/a/8726763/2231632 - 可能重複 – prabugp

+0

這解決了我的問題: http://stackoverflow.com/questions/8726396/hibernate-criteria-join-with-3 -tables/8726763#8726763 – Ricsie

回答

0

這解決了我的問題:

Hibernate Criteria Join with 3 Tables

忘了別名添加到標準的創建也

的提取模式只是說,該協會將會被獲取。如果 想要爲關聯實體添加限制,則必須創建一個 別名或子標準。我一般喜歡使用別名,但YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument"); 
c.createAlias("dokument.role", "role"); // inner join by default 
c.createAlias("role.contact", "contact"); 
c.add(Restrictions.eq("contact.lastName", "Test")); 
return c.list(); 

這是當然井Hibernate參考手冊解釋,並用於 標準的Javadoc甚至有例子。閱讀文檔:它 有很多有用的信息。