Ich hatte ja gehofft, dass es sowas wie size, length. isEmpty oder so gibt, habe aber nichts gefunden.
Ich will Fallunterscheidungen vermeiden, weil es manchmal mehrere dieser Listen sind (Sprachen, Kategorien u.s.w.), und man dann natürlich eine kombinatorische Explosion hat.
public List<QuestionEntity> find1(List<String> ids) {
List<QuestionEntity> list = findByIds(ids);
if (list.isEmpty()) {
return findAll();
}
return list;
}
@Query("SELECT q FROM QuestionEntity q WHERE" +
"q.id IS IN :ids OR <<:ids ist leer>>")
public List<QuestionEntity> findByIds(List<String> ids);
@Query("query...")
public List<QuestionEntity> findAll();
Ich verstehe noch nicht, wo du kombinatorisch-explodierenden Aufwand siehst.
Den explodierenden Aufwand habe ich, wenn ich neben der einen Liste noch weitere (mit der gleichen „zeige alles wenn leer“ Logik) in der gleichen Query habe. Also in etwa:
@Query("SELECT q FROM QuestionEntity q WHERE" +
"(q.id IS IN :ids OR <<:ids ist leer>>) "+
"AND (q.language IS IN :languages OR <<:langauges ist leer>>) " +
"AND (q.type IS IN :types OR << :types ist leer >>)"
)
Dann hast du schon mal acht verschiedene Methoden.
Es sollte mit der Criteria API in JPA gehen - da explodiert da nicht Kombinatorik, weil du da das dann für jedes Attribut zwar machen musst - aber nur bei erzeugen des Kriteriums und unabhängig von andern