Wie verwende ich Array -Funktionen in JPA -Abfrage ohne native Abfrage?Java

Java-Forum
Anonymous
 Wie verwende ich Array -Funktionen in JPA -Abfrage ohne native Abfrage?

Post by Anonymous »

Ich möchte die Funktion array_overlaps () in einer JPA -Abfrage verwenden, ohne explizit auf eine native Abfrage zurückzugreifen.

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
) behebt das Problem nicht. Darüber hinaus ist in meinem Testszenario immer der Eingangswert vorhanden, sodass das Fehlen der Nullprüfung auch nicht die Ursache ist. oder behandeln () , fand aber nicht den Weg, es richtig zu machen. Zum Beispiel Cast (: SelectedIDs AS Collection ) gibt Kompilierungsfehler an. Aber es führt auch zu Kompilierungsfehlern: < /p>

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'
Wie kann ich eine Sammlung als Array -Parameter in JPA korrekt übergeben, damit Array_Overlaps () ohne Verwendung einer nativen Abfrage funktioniert? Gibt es eine alternative Möglichkeit, Arrays in JPA darzustellen, die das Problem der Bytea -Konvertierung vermeiden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post