2017-03-02 38 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