首页 > 解决方案 > Spring Data JPA:PostgreSQL:IN子句中的空集合值

问题描述

我正在尝试将我的数据库从 MySQL 迁移到 PostgreSQL。数据没有问题,但我在一个 Spring Data 查询中遇到了这个问题,该查询以前运行良好(在 MySQL 上)。这是“有问题的”查询(为了更清楚地理解它进行了简化):

@Query("SELECT se FROM SomeEntity se " +
       "WHERE coalesce(:someValues, null) is null or se.someColumn in (:someValues))")
List<SomeEntity> findBySearchFilter(Set<SomeEnum> someValues);

someValues不为 NULL 时,查询工作正常,但是当它为 NULL 时问题就开始了:

Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer
  Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
  Position: <position of the IN clause>

这是我的实体(也被简化了):

@Entity
@Table(name = "some_table")
public class SomeEntity {

    SomeEnum someColumn;

    @Column(name = "some_column", nullable = false)
    public SomeEnum getSomeColumn() {
        return someColumn;
    }

}

这是我的枚举:

public enum SomeEnum {
  
  A("A"),
  
  B("B"),
  
  C("C");

  private String value;

  SomeEnum(String value) {
    this.value = value;
  }

  public String getValue() {
    return value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

标签: javamysqlsqlpostgresqlspring-data-jpa

解决方案


推荐阅读