I've got the following code to set a List parameter in a NOT IN clause in an HQL query
private static final String FIND_AVAILABLE_OPERATORS = "FROM Domain domain WHERE domain.type = :type AND domain.operators NOT IN (:operators)";
@SuppressWarnings("unchecked")
@Override
public List<Domain> findAvailableOperators(Domain domain) {
    Query query = null;
    if (domain.getOperators().isEmpty()) {
        query = getCurrentSession().createQuery(FIND_BY_DOMAIN_TYPE); // run another query
    } else {
        query = getCurrentSession().createQuery(FIND_AVAILABLE_OPERATORS);
        query.setParameterList("operators", domain.getOperators());
    }
    query.setParameter("type", DomainType.OPERATOR);
    return query.list();
}
but I get an SQLGrammarException when my List is not empty
org.hibernate.exception.SQLGrammarException: No value specified for parameter 2
Am I using the setParameterList() incorrectly?
The SQL executed seems to be
Hibernate: select domain0_.domain_id as domain1_2_, domain0_.country as country2_, domain0_.name as name2_, domain0_.type as type2_ from domain domain0_ cross join domain_operators operators1_, domain domain2_ where domain0_.domain_id=operators1_.parent and operators1_.child=domain2_.domain_id and (. not in  (?)) and domain0_.type=?
I've never seen (. not in  (?)).
EDIT: My Domain entity
@Entity
@Table
public class Domain {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    @Column(name = "domain_id")
    private Long domainId;
    @Column(nullable = false, unique = true)
    @NotNull
    private String name;
    @Column(nullable = false)
    @NotNull
    @Enumerated(EnumType.STRING)
    private DomainType type;
    @ManyToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
    }, fetch = FetchType.EAGER)
    @JoinTable(joinColumns = {
            @JoinColumn(name = "domain_id")
    }, inverseJoinColumns = {
            @JoinColumn(name = "code")
    })
    private Set<NetworkCode> networkCodes = new HashSet<>();
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(joinColumns = {
            @JoinColumn(name = "parent", referencedColumnName = "domain_id")
    }, inverseJoinColumns = {
            @JoinColumn(name = "child", referencedColumnName = "domain_id")
    })
    private Set<Domain> operators = new HashSet<>();
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Country country;
    public Domain() {}
        ... setters/getters
    }
 
     
     
    