首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有JPA / Hibernate和PostgreSQL的Spring(Boot) -日期使用重叠

带有JPA / Hibernate和PostgreSQL的Spring(Boot) -日期使用重叠
EN

Stack Overflow用户
提问于 2020-06-30 12:49:40
回答 1查看 866关注 0票数 1

因此,我有一个项目,其中我们使用springBoot和PostgreSQL 10与PostGis和hibernate.spatial一起进行空间查询。到目前为止一切都很好。

一个新的要求是查找实体,这些实体以任何可能的方式与查询的起始日期重叠(范围可能是包围、开始重叠、中间重叠、结束重叠)。

在PostgreSQL中,重叠操作符似乎非常适合这项工作。

当试图在我的JPA-查询中使用它时,像这样的实体"Sth“。

代码语言:javascript
运行
复制
select sth from Sth sth where 1=1 and (sth.start, sth.end) overlaps (:begin, :end)
// set begin and end params..

我得到一个..。

代码语言:javascript
运行
复制
antlr.NoViableAltException: unexpected token: overlaps

antlr.NoViableAltException: unexpected AST node: (

org.postgresql.util.PSQLException: FEHLER: rt_raster_from_wkb: wkb size (5)  < min size (61)

是否可以在不编写本机查询的情况下对JPA的日期使用重叠?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 12:49:40

因此,似乎有三件事,你需要做,使它的工作。

  1. 它可能不可能使用重叠作为运算符,但幸运的是,它似乎也可以用作一个函数:overlaps(start1, end1, start2, end2)
  2. 任何hibernate核心PostgreSQLNNDialects都不会映射重叠。但是它的是由hibernate-空间PostgisPGNNDialects映射的,其中它映射到用于空间重叠的st_overlaps函数。因此,您需要使用自己的自定义方言,使用别名注册重叠函数,如下所示:

代码语言:javascript
运行
复制
public class PostgisDialect extends org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect {

    public PostgisDialect() {
        super();
        registerFunction("dateoverlaps", new StandardSQLFunction("overlaps", StandardBasicTypes.BOOLEAN));
    }

}

并将其指定为spring.jpa.properties.hibernate.dialect (或spring.jpa.database-platform‍♂️)。

  1. JPA查询必须包括如下所示的= true

代码语言:javascript
运行
复制
select sth from Sth sth where 1=1 and dateoverlaps(sth.start, sth.end, :begin, :end) = true

您可以通过使用coalesce函数来处理空值(即

代码语言:javascript
运行
复制
select sth from Sth sth where 1=1 and dateoverlaps(coalesce(sth.start, sth.plannedStart), coalesce(sth.end, '3999-01-01'), :begin, :end) = true

它在start为null时使用plannedStart,当end为null / open时使用长时间的将来日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62657855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档