1

如果我想在我的 SQL Developer 中执行以检查它是否获取正确的数据,我很想知道这个查询是如何工作的。

当我开始调试我们的 java 代码时,我最终找到了在表中查找数据的查询,但是它的处理方式让我感到困惑。谁能解释我的逻辑?如果我想在数据库客户端中执行,谁能告诉我我的 SQL 查询是什么?

select distinct pA.id
 from CHECK_TABLE pA 
 left join pA.node node
 left join pA.kms km
 where 1=1

POJO的

public class CHECK_TABLE implements XXXDataObject
{
    private long                     id                   = 0;
    private String                   name                 = null;
    private XXNode                   node                 = null;
    private List<Akm>                kms                  = null;


    public long getId()
    {
        return id;
    }


    public void setId( long id )
    {
        this.id = id;
    }

    .....
    .....

    public XXNode getNode()
    {
        return node;
    }


    public void setNode( XXNode node )
    {
        this.node = node;
    }

    @ManyToMany( cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = com.XXXXXXXXXX.Akm.class )
    @JoinTable( name = "TABLE_KM", joinColumns = { @JoinColumn( name = "TABLE_ID" ) }, inverseJoinColumns = { @JoinColumn( name = "KM_ID" ) } )
    public List<Akm> getKms()
    {
        return kms;
    }

    public void setKms( List<Akm> kms )
    {
        this.kms = kms;
    }

}

我在我的数据库中看到了 CHECK_TABLE、XXNode、Akm 的相应表。但是 CHECK_TABLE 保存除 XXNode、Akm 之外的数据,它们通过外键约束连接。

4

1 回答 1

0

查询可以简化为

select distinct pA.id from CHECK_TABLE pA 

它转换为以下 SQL 查询:

select distinct pA.id from CHECK_TABLE pA 

要了解 HQL 查询如何转换为 SQL,只需在 Hibernate 中启用 SQL 日志记录,然后查看 Hibernate 记录的内容。这可以通过在配置文件中将hibernate.show_sql 属性设置为 true 来完成。

于 2013-07-11T22:10:45.210 回答