java - 在 Java Spring Hibernate 中连接多个表

标签 java spring hibernate orm join

我在 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/

相关文章:

java - 如何在clojure中将java类序列化为json

java - Tomcat 8 中的 Atomikos,如何将 server.xml 中带有 XA 的 JDBC 资源配置为 as400?

javascript - React 根据结果数量动态创建按钮

java.lang.ClassCastException : java. lang.String 无法转换为 [Ljava.lang.Object

javascript - 在 spring mvc 中通过 AngularJs 提交表单

java - JPA/Hibernate无法理解持久顺序

Java : Why there is no difference in JVM Heap Size even after Object Creation

java - 如何将自定义类型的数组从一个 Activity 传递到另一 Activity ?

java - spring boot缓存redis,key有\xac\xed\x00\x05t\x00\x06

Java - 在 Windows 10 上调用 Paint(),但在 OSX 10.10.5 上不调用