我在 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'%)
问题是,searchedId 和 searchedName 是可选列,它们可以是空字符串,当它们是空字符串时,我不需要将它们放入查询中以加快查询速度。我尝试使用条件生成器,但由于结果是来自多个表的连接列,我无法将它们放入任何存储库中。
最佳答案
在这种情况下,您可以动态构建 native 查询,如下所示:
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();
关于java - 在 Java Spring Hibernate 中连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403530/