<named-query name="Category.getids1">
<query>
<![CDATA[
SELECT spov.versionId
FROM SpecificationCategoryVersion spov
WHERE ?1 is null OR spov.releaseDate is null]]>
</query>
</named-query>
<named-query name="Category.getids2">
<query>
<![CDATA[
SELECT spov.versionId
FROM SpecificationCategoryVersion spov
WHERE ?1 is null OR spov.releaseDate <= ?1
]]>
</query>
</named-query>
<named-query name="Category.getids3">
<query>
<![CDATA[
SELECT spov.versionId
FROM SpecificationCategoryVersion spov
WHERE ?1 is null OR spov.releaseDate is null OR spov.releaseDate <= ?1
]]>
</query>
</named-query>
@Repository("specificationCategoryRepository")
public interface SpecificationCategoryRepository extends
JpaRepository<SpecificationCategory, Long>{
...
@Query(name = "Category.getids1")
List<String> getIds1(Date validOn);
@Query(name = "Category.getids2")
List<String> getIds2(Date validOn);
@Query(name = "Category.getids3")
List<String> getIds3(Date validOn);
}
当使用null调用三个方法时,getIds1按预期工作,
但getIds2,getIds3提出以下抱怨:
SQL Error: 932, SQLState: 42000
ORA-00932: inconsistent datatypes: expected DATE got BINARY
令人惊讶的是,各自的原生SQL:
select specificat0_.VERSION_ID as col_0_0_
from SPEC_CATEGORY_VERSION specificat0_
where ? is null or specificat0_.RELEASE_DATE<=?
和
select specificat0_.VERSION_ID as col_0_0_
from SPEC_CATEGORY_VERSION specificat0_
where ? is null
or specificat0_.RELEASE_DATE is null
or specificat0_.RELEASE_DATE<=?
在&#39;?&#39;被替换为null。
顺便说一下, SPEC_CATEGORY_VERSION.RELEASE_DATE 可以为空
环境
数据库: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产 PL / SQL版本12.1.0.2.0 - 生产 &#34;核心12.1.0.2.0生产&#34; 适用于Linux的TNS:版本12.1.0.2.0 - 生产 NLSRTL版本12.1.0.2.0 - 生产
爪哇: java版&#34; 1.7.0_07&#34; Java(TM)SE运行时环境(版本1.7.0_07-b10) Java HotSpot(TM)64位服务器VM(版本23.3-b01,混合模式)
服务器:红帽JBoss企业应用平台 - 版本6.3.3.GA
方言:HHH000400:使用方言:org.hibernate.dialect.Oracle10gDialect
版本:HV000001:Hibernate Validator 4.3.1.Final-redhat-1
在这方面的任何帮助都将非常受欢迎。