Pergunta

Em um aplicativo baseado no JPA2/Hibernate/Oracle+Spring+Wicket, eu uso o seguinte modelo:

public class Item {
 private String name;
 private Set<Application> apps;
 private ...
}

public class Application {
 private String applicant;
 private Item item;
 private Status status;
 private ...
}

O mapeamento entre item e aplicação é que todo item possui muitos aplicativos, cada aplicativo aponta para apenas um item.

Agora, quero procurar aplicativos que atendam a um conjunto complexo de critérios e seria ótimo se o conjunto de resultados fosse um conjunto de pares <item, list <pplication>> (ele não pode ser apenas definido <tem>, porque geralmente apenas Um subconjunto de aplicativos para um item específico satisfaria os critérios).

Você poderia me recomendar uma maneira de fazer isso? Minha primeira idéia foi consultar primeiro para pares <ItemId, Appid> e depois itera através deles e produzir o conjunto de resultados manualmente, mas parece bastante pesado e ineficaz.

Foi útil?

Solução

Se você deseja expressá -lo em uma única consulta (então, você usa JOIN para expressar critérios no Applications), a consulta para pares é a única maneira de fazê -lo - é assim que os bancos de dados relacionais funcionam.

Outras dicas

Sugiro o uso de consultas de critérios JPA2 com tuplas e subconsivas. Algo na linha de (pseudocode):

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> crit = cb.createTupleQuery();
Subquery<Application> subquery = cb.subquery(Application.class);
subquery.where(...);
subquery.correlate(...);
crit.select(cb.tuple(cb.from(Item.class), subquery);

É pseudocódigo porque não tenho a sintaxe exata para as subconsivas em mente agora e nenhum eclipse para experimentá -lo, desculpe. Há uma boa introdução às subconsações em Keith, Schincariol. Pro JPA 2: Dominando a API de persistência Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top