Ich habe eine JSF-Anwendung unter Verwendung von JPA zum Zugriff auf die Datenbank erstellt. Es gibt eine Reihe von Entitäten.
Ich möchte ein Suchergebnisbildschirm erstellen, der Spalten aus mehr als einer Entität in einer Tabelle anzeigt. Diese Entitäten haben keine Fremdschlüsselbeziehungen.
Um dies zu erreichen, habe ich ein EnttityManager.createNativeQuery verwendet und ein EntityMapping angegeben, wie folgt:
Query q = em.createNativeQuery(
"select t.id as id1, t.bb as bb1, t.cc as cc1," +
"t2.id as id2, t2.aa as aa2, t2.bb as bb2 " +
" from table1 t, table2 t2 where t.cc = '22' and t2.id = 2", "TestMapping");
result = q.getResultList();
TestMapping sieht so aus:
@SqlResultSetMapping(name =
"TestMapping", entities = {
@EntityResult(entityClass = Table1.class, fields = {
@FieldResult(name = "id", column = "id1"),
@FieldResult(name = "bb", column = "bb1"),
@FieldResult(name = "cc", column = "cc1")}
),
@EntityResult(entityClass = Table2.class, fields = {
@FieldResult(name = "id", column = "id2"),
@FieldResult(name = "aa", column = "aa2"),
@FieldResult(name = "bb", column = "bb2")}
)
} )
Dies funktioniert, wenn ich alle Spaltennamen aus beiden Entitäten in der Abfrage angebe, was in diesem kleinen Beispiel in Ordnung ist, aber die Suchergebnisse müssen aus 4 Entitäten auswählen, die alle eine große Anzahl von Spalten haben. Wenn ich nicht alle Spalten im EntityMapping angebe, wird eine Ausnahme im Aufruf von getResultList() geworfen.
Meine Frage lautet: Ist es möglich, nur die in der Abfrage ausgewählten Spalten im EntityMapping anzugeben, anstatt alle aus den Entitäten angeben zu müssen?