Hibernate中的动态查询

时间:2017-10-30 21:08:08

标签: java oracle hibernate spring-data-jpa

在我的项目中,我正在使用Hibernate并写入,现在我正在努力解决一个问题。在我正在进行的项目中,我需要创建类似动态查询的东西。让我介绍一下发生了什么......

我有8个不同的查询。每个查询的SELECTFROM和第一个WHERE子句都相同:

SELECT col1, col2, ..., colX FROM table WHERE col1 = :param1;

关键在于,基于一个参数,查询的其余部分在每种情况下都是不同的。以下案例:

  1. 简单查询 - 只是其他查询的基础。
  2. 另外一个WHERE条件:AND col2 = :param2
  3. 与前一个相同,但不同列的条件为:AND col3 = :param2
  4. 更复杂 - JOIN子句,在WHERE子句第二个条件中再次出现在不同的列上,但在这里我们UNION具有完全相同的查询,如第3点。
  5. 与查询号相同。 4,但在WHERE语句之前的UNION子句中有不同的列。
  6. 与查询5中的规则相同。
  7. 与查询5中的规则相同。
  8. 此处只有JOINWHERE子句中有3个条件而不是2个。
  9. 我认为就是这样,但我只是提醒一下,对于所有这些查询,我们可以动态应用额外的WHERE条件,但如果有{SELECT,它们需要出现在JOIN中1}}。

    有可能吗?现在我通过使用StringBuilderif ... else语句将正确的列名称传递给方法来解决问题,该语句负责UNIONJOIN和{{1}条件。

    我并不为此感到骄傲,我不喜欢它,但我不知道如何更好地解决这个问题......

1 个答案:

答案 0 :(得分:1)

我认为Hibernate的Criteria API应该对此有所帮助。 一些例子: http://www.baeldung.com/hibernate-criteria-queries