【问题标题】:Hibernate query/realting multiple tables using criteria or hql使用条件或 hql 进行休眠查询/处理多个表
【发布时间】:2017-03-02 18:33:28
【问题描述】:

我是 Hibernate 的新手,想实现 hibernate 标准或 hql 来查询多个表以获取结果,但我遇到了问题。 现在我在hibernate中使用本机sql来完成我需要的但想用hql/criteria尝试同样的事情.. 下面是我用来获取结果的本机查询..

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 类中的表之间的映射,我很难理解.. 所以出来寻求社区的任何帮助来拯救我.. 感谢您对此进行调查,任何帮助将不胜感激..

【问题讨论】:

    标签: java hibernate hibernate-mapping hibernate-criteria


    【解决方案1】:

    我建议您参考此处的 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();
    

    【讨论】:

    • 感谢 Uday...我想通了不使用 hql(尽管它是直接加入)..但无法做到这一点,为此我认为我可能需要实现两者之间的关系实体类中的表对吗?
    • 嗯,不一定,但这取决于你想做什么。您可以使用 DetachedCriteria 而不需要实体之间的关系,但是,这就像一个子查询。定义关系将是理想的。关于 HQL 与 Criteria,Criteria 是 HQL 的一种优雅的类型安全替代方案,在大多数情况下更适合动态查询。但是,由于性能原因和 Criteria 的限制,在某些情况下 HQL 优于 Criteria。希望有帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多