Il n'y a aucun moyen de cartographier les classes non-entité dans JPA 1.
Depuis JPA 2.1, vous pouvez utiliser ConstructorResult, Utilisé conjointement avec l'annotation SqlResultSetMapping
pour cartographier la clause SELECT d'une requête SQL à un constructeur.
Voici l'exemple
Query q = em.createNativeQuery(
"SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS avgOrder " +
"FROM Customer c, Orders o " +
"WHERE o.cid = c.id " +
"GROUP BY c.id, c.name",
"CustomerDetailsResult");
@SqlResultSetMapping(
name="CustomerDetailsResult",
classes={
@ConstructorResult(
targetClass=com.acme.CustomerDetails.class,
columns={
@ColumnResult(name="id"),
@ColumnResult(name="name"),
@ColumnResult(name="orderCount"),
@ColumnResult(name="avgOrder", type=Double.class)
}
)
}
)
Vous cherchez [SqlResultSetMapping] (http://docs.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html)? Cela fonctionne uniquement avec les versions JPA 2.1 ou supérieures. – harshavmb
et si vous n'utilisez pas JPA 2.1 alors cela dépend de votre fournisseur JPA, mais vous ne dites pas lequel vous utilisez. Je sais que DataNucleus supporte une telle transformation pré-JPA 2.1 –