Code: Select all
@Query(value = """
SELECT view FROM FilterView view
WHERE (:selectedIds IS NULL
OR array_overlaps(view.ids, (:selectedIds)) IS true)
""")
List findAllByFilter(Collection selectedIds);
< /code>
Definition der Entität ansehen: < /p>
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "filter_view")
public class FilterView {
@JdbcTypeCode(Types.ARRAY)
@Column(name = "ids")
private Collection ids;
// other fields
}
< /code>
SQL-Datei anzeigen: < /p>
DROP VIEW IF EXISTS filter_view;
CREATE VIEW filter_view AS
SELECT
ARRAY_AGG(DISTINCT p.id) AS ids,
-- other columns
FROM my_entity p
LEFT JOIN ...
GROUP BY ...
< /code>
In dieser Konfiguration begegne ich den folgenden Laufzeitfehler: < /p>
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint[] && bytea
< /code>
Der Fehler legt nahe, dass der Parameter aus SelectedIDs als Bytea behandelt wird, obwohl er in der Methodensignatur als Sammlung definiert ist, was ich nicht vollständig verstehe, warum. Dies führt zu einem Typ -Missverhältnis.:selectedIds IS NULL OR
Code: Select all
Caused by: org.hibernate.query.sqm.produce.function.FunctionArgumentException:
Parameter 1 of function 'array_overlaps()' requires an array type
java.util.Collection, but argument is of type 'java.lang.Object'