2017-03-02 36 views
0

我是Hibernate的新手,希望實現hibernate標準或hql來查詢多個表以獲得結果,我有問題要做。 現在我是使用本地SQL休眠來完成我需要,但想嘗試與HQL /標準相同.. 下面是我用得到的結果本地查詢..Hibernate使用標準或hql查詢/實現多個表

select table1.dmname,table2.polname,table3.path,table4.uidname 
    from table1,table2,table3,table4 
    where table3.dmnid = table1.dmnid 
    and table3.polid = table2.polid 
    and table3.3.uid = table4.uid 
下面

是我的實體POJO類

表1:

@Entity 
@Table(name = "table1", uniqueConstraints = @UniqueConstraint(columnNames = "dmname")) 
     @Cache(usage=CacheConcurrencyStrategy.READ_ONLY,region="domain") 
public class table1 { 

    private String dmnid; 
    private String dmnname; 

    @Id 
    @Column(name = "dmnid", unique = true, nullable = false) 
    public String getDmnid() { 
     return this.dmnid; 
    } 

    public void setDmnid(String dmnid) { 
     this.dmnid = dmnid; 
    } 

    @Column(name = "dmnname", unique = true, nullable = false) 
    public String getDmnname() { 
     return this.dmnname; 
    } 

    public void setDmnname(String dmnname) { 
     this.dmnname = dmnname; 
    } 

表2:

@Entity 
@Table(name = "table2", uniqueConstraints = @UniqueConstraint(columnNames = { 
     "dmnname", "polname" })) 
public class table2 implements java.io.Serializable { 

    private String dmnname; 
    private String polid; 
    private String polname; 

    // getters and setter 

表3:

@Entity 
@Table(name = "table3") 
public class table3 implements java.io.Serializable { 

    private String dmnname; 
    private String polid; 
    private String uid; 
    private String path; 

    // getters and setters 

表4:

@Entity 
@Table(name = "table4", uniqueConstraints = @UniqueConstraint(columnNames = "uidname")) 
public class table4 implements java.io.Serializable { 

    private String uid; 
    private String uidname; 

    // getters and setters 

我還沒有實現出來的表之間的映射在POJO類還和我很難理解這一點.. so co從社區的任何幫助救出我.. 感謝您查看此和任何幫助將不勝感激..

回答

0

我建議你參考Hibernate文檔在這裏詳細瞭解關聯。 http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#associations

關於您的HQL的問題,它會是這個樣子轉換您的本地SQL(除非你需要的任何顯式連接條件):

Query query = session.createQuery('from table1 t1,table2 t2,table3 t3,table4 t4 
     where t3.dmnid = t1.dmnid 
     and t3.polid = t2.polid 
     and t3.uid = t4.uid'); 
    List results = query.list(); 
+0

感謝烏代......我想通了,用HQL做的(雖然它的直接連接雖然)..但不能夠做到這一標準,爲此我想我可能需要實現實體類中的表之間的關係權。 – marc

+0

嗯,不一定,但它取決於你想要做什麼。你可以使用'DetachedCriteria'而不需要實體之間的關係,但是,這將會像一個子查詢。定義關係將是理想的。關於HQL與Criteria,Criteria是一個優雅的HQL類型安全替代方案,在大多數情況下對於動態查詢來說更好。但是,有些情況下,由於性能原因和標準限制,HQL優先於標準。希望有所幫助! – YuVi