在Java Spring Hibernate中加入多个表

时间:2016-05-24 02:41:32

标签: java spring hibernate orm jointable

我在Java Spring hibernate中加入表时遇到问题。这是我的问题:

我正在开发一个网站,在我的一个页面中,我需要三个表中的数据,它们是x,y,z。我将每个映射到实体并拥有自己的存储库。在此页面中,我使用此查询显示数据:

SELECT x.a, y.b, z.c FROM x,y,z WHERE x.id = y.name AND z.id = y.personalId AND
(x.id like %'searchedId'% or y.id like %'searchedId'% or z.id like %'searchedId'%) AND
(x.name like %'searchedName'% or y.name like %'searchedName'% or z.name like %'searchedName'%)

问题是,searchId和searchingName是一个可选列,它们可能是空字符串,当它们是空字符串时,我不需要将它们放入我的查询中以加快它的速度。我尝试使用条件构建器,但由于结果是来自多个表的连接列,我无法将它们放入任何存储库。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以动态构建如下所示的本机查询:

StringBuilder query = new StringBuilder("SELECT x.a, y.b, z.c FROM x,y,z WHERE x.id = y.name AND z.id = y.personalId ");

if (searchId !=null)
    query .append(" AND
(x.id like %'searchedId'% or y.id like %'searchedId'% or z.id like %'searchedId'%) ");

if (searchedName !=null)
    query .append(" AND
(x.name like %'searchedName'% or y.name like %'searchedName'% or z.name like %'searchedName'%) ");

SQLQuery query = session.createSQLQuery(query);
List result = query.list();