PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

HQL:controlla se un array contiene un valore

Per mappare gli array avrai bisogno di un tipo personalizzato. È possibile utilizzare il progetto hibernate-types per questo:https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/

Hai provato a usare e2.col3 = FUNCTION('ANY', e1.col3Arr) ancora? Se ciò non funziona, ti suggerisco di creare una SQLFunction personalizzata che rende l'SQL che desideri ad es.

public class ArrayAny implements SQLFunction {

    @Override
    public boolean hasArguments() {
        return true;
    }

    @Override
    public boolean hasParenthesesIfNoArguments() {
        return true;
    }

    @Override
    public Type getReturnType(Type firstArgumentType, Mapping mapping) throws QueryException {
        return firstArgumentType;
    }

    @Override
    public String render(Type firstArgumentType, List args, SessionFactoryImplementor factory) throws QueryException {
        return "any(" + args.get(0) + ")";
    }
}

Dovrai registrare la funzione all'interno del Dialetto.