【问题标题】:Spring data jpa like query compatible with Oracle and PostgresSpring data jpa like query 兼容 Oracle 和 Postgres
【发布时间】:2020-11-26 10:18:15
【问题描述】:

我有一个 Spring 数据存储库,方法如下。

Page<FooEntity> findAllByTenantNameAndEventTypeContainingIgnoreCaseAndReferenceContainingIgnoreCaseAndSourceServiceInIgnoreCase( //NOSONAR
        String tenantName,
        String eventType,
        String reference,
        List<String> services,
        Pageable pageable);

只要字段的值:tenantNameeventTypereference 为空,在 Postgres 中它会返回预期的列表。

但是对于Oracle数据库,它不返回数据。

我知道这是因为 Oracle 在内部将空字符串转换为 null。因此我没有得到任何数据。

如何使这种查询方法同时兼容 PostgresOracle

【问题讨论】:

  • 您似乎对有意义的方法命名给予的重视是值得称赞的...findAllByTenantNameAndEventTypeContainingIgnoreCaseAndReferenceContainingIgnoreCaseAndSourceServiceInIgnoreCase
  • 你在讽刺吗? :D
  • 不。这是不常见的,我必须在我以前工作过的地方艰难地学习它(即使我不完全那样做,我仍然认为认真对待它是有价值的)

标签: java oracle postgresql spring-data-jpa


【解决方案1】:

不幸的是,在数据库级别没有解决此问题的方法 - 请参阅 https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements005.htm#SQLRF51081,即使 Oracle 也承认这不是最佳的:

Oracle 数据库当前将长度为零的字符值视为空值。但是,这在未来的版本中可能不会继续如此,Oracle 建议您不要将空字符串视为空值。

所以对于你的问题,我想你需要找到一种方法来解决这个问题。

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2021-06-12
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多