我在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是一个可选列,它们可能是空字符串,当它们是空字符串时,我不需要将它们放入我的查询中以加快它的速度。我尝试使用条件构建器,但由于结果是来自多个表的连接列,我无法将它们放入任何存储库。
答案 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();