繁体   English   中英

通过 Oracle 到 Oracle 中的 SQL 查询中的日期的 null 值传递到 ZF8CB4B31358F17FA37CFAE6C2DZA0

[英]Pass null value for date in SQL query in Oracle through Hibernate

我在 sql 查询中传递日期的 null 值时遇到问题。 导致问题的部分如下:

....
WHERE (s.CREATED_DATE BETWEEN (CASE WHEN ?1 IS NULL THEN ADD_MONTHS(LAST_DAY(sysdate), -500) ELSE ?1 END) AND (CASE WHEN ?2 IS NULL THEN sysdate ELSE ?2 END))
....

当我通过 Hibernate 在参数中传递日期的 null 值时,我得到了这个臭名昭著的错误:

ORA-00932: inconsistent datatypes: expected DATE got BINARY

我已经在 stackoverflow 中查看了有关此问题的先前问题,但解决方案似乎对我不起作用。 此查询由 hibernate 通过 spring 的 @Query 注释作为本机查询运行。 有没有办法解决这个问题?

编辑:我发现如果我将@Temporal 注释放在@Param 之外,那么 spring 将自动解析日期,如果它是 null。 问题是我将无法使用 LocalDateTime 并且只有 SQL Date 没有时间。 我的存储库方法是这样的:

@Query("The query mentioned above", nativeQuery=true)
Optional<SomeDTO> getNeededInfo(@Temporal @Param("after")Date after, @Temporal @Param("before") Date before)

如果要为此查询设置参数,则需要使用 3 参数方法,如下所示:

setParameter(1, date1, TemporalType.DATE);
setParameter(2, date2, TemporalType.DATE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM