【问题标题】:Hibernate Dynamic @Where clauseHibernate 动态 @Where 子句
【发布时间】:2016-10-25 18:08:26
【问题描述】:

我在@Table 级别拥有@Where。

我需要获取 EffDate 字段小于当前日期的行。

@Entity
@Table(name="party")
@Where(clause="EffDate < " + currentdate())
public class Party implements Serializable {
.......
}

我了解@Where 采用需要在编译时提供的常量表达式。但我需要与 Java 中的当前日期而不是数据库中的当前日期进行比较。

任何想法我该怎么做。

【问题讨论】:

  • JPA 没有这样的@Where 注释
  • 谢谢@NeilStockton。更新了标题。

标签: java spring hibernate spring-boot


【解决方案1】:

您可以将 SQL 函数/常量用于当前时间戳(取决于可能调用的数据库类型,例如 current_timestamp)(但是请注意,由于这将是纯 SQL,它将使用来自数据库服务器,而不是运行 Java 应用程序的服务器:

@Where(clause="EffDate < current_timestamp") 

【讨论】:

  • 感谢您的快速回复。我需要它来自 Java 应用程序而不是数据库。
【解决方案2】:

写一个Hibernate filter 并默认为应用程序中的所有会话启用它。根据您用于事务管理的框架,您可以添加一个拦截器/挂钩,以便在事务启动时启用过滤器。

【讨论】:

    【解决方案3】:

    @Where 注释不起作用,因为它接受常量表达式。相反,我使用 JPARepository 中的 findOnByEffectiveDateLessThanEquals。

    http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 2019-10-12
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2013-12-19
      相关资源
      最近更新 更多