hibernate生成的过于冗长的查询

时间:2014-10-27 20:44:03

标签: java hibernate jpa jpql

如何设置JPQL和/或hibernate以仅从具有复杂的嵌套属性Web的实体返回可管理数量的数据?具体来说,此查询:

@Override
public Patient findPatientByHjid(Long hjid){
    Query query = this.em.createQuery("SELECT patient FROM Patient patient WHERE patient.hjid =:id");
    query.setParameter("id", hjid);
    return (Patient) query.getSingleResult();
}

正在生成过长的hibernate sql。我已经多次检查调试器中的程序流,并且我看到它每次生成相同的两个hibernate sql语句,即使我不明白它为什么会生成多个SQL语句。第二个语句非常冗长,它会引发以下错误:

java.sql.SQLException: Too many tables; MySQL can only use 61 tables in a join  

为了保持这个帖子的可读长度,我已经将一些冗长的资源上传到文件共享站点。 请注意,文件共享站点中心证明文本是正确的,即使它在eclipse中是正确的。您可以阅读由上述JPQL by clicking on the following link产生的两个hibernate查询。此外,您还可以读取整个堆栈跟踪at this link。您可以阅读Patient.javaby clicking on this link的代码。

如何更改我的代码,以便我只从查询中获取少量摘要数据,从而避免所有这些愚蠢的广泛不必要的连接?

1 个答案:

答案 0 :(得分:0)

这可能是因为你有大量的EAGER @ManyToOne关联。将它们切换为LAZY,因为EAGER fetching is a code smell