如何通过 Querydsl 将 String[] 作为 varchar[] 传递给 PostgreSQL?

How to pass String[] as varchar[] through Querydsl to PostgreSQL?

试图更干净地解决 ,我已经走到这一步了。

// obj.foo is an ArrayPath<String[], String>
bindings.bind(obj.foo).first((path, value) -> 
        Expressions.booleanTemplate("arraycontains({0}, {1}) = true", path, value));

这最终看起来是正确的 SQL

where arraycontains(obj0_1_.foo, ?)=true

但似乎 String[] 变量没有正确传递

org.postgresql.util.PSQLException: ERROR: function arraycontains(character varying[], bytea) does not exist

我怎样才能(如果可能的话)

  1. 获取 String[] 值以绑定为 varchar[]?
  2. booleanTemplate?
  3. 中表达必要的投射

不是直接传递 String[],而是将其包装在 TypedParameterValue 中。

hibernate-types 库 not yet support varchar[],但您可以使用它来构建具有以下功能的东西:

public class VarcharArrayType extends AbstractHibernateType<String[]> {
    public static VarcharArrayType INSTANCE = new VarcharArrayType();

    public VarcharArrayType() {
        super(ArraySqlTypeDescriptor.INSTANCE, new TypeDescriptor());
    }

    public String getName() {
        return "varchar-array";
    }

    public static class TypeDescriptor extends StringArrayTypeDescriptor {
        @Override
        protected String getSqlArrayType() {
            return "varchar";
        }
    }
}