Hibernate Dynamic @Where子句

时间:2016-10-25 18:08:27

标签: java spring hibernate spring-boot

我在@Table级别拥有@Where。

我需要让EffDate字段的行少于当前日期。

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

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

任何想法我该怎么做。

3 个答案:

答案 0 :(得分:0)

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

@Where(clause="EffDate < current_timestamp") 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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