@SqlResultSetMapping可以放在任何实体类中(不要为POJO注释-它不起作用)。
@ConstructorResult在JPA 2.1版中添加了映射到POJO类。与映射一起使用的POJO必须具有正确的构造函数。
必须使用
ConstructorResult批注中的
columns元素以与构造函数的参数列表相同的顺序指定与预期构造函数的参数对应的所有列。
请参考以下查询用法示例,并据此解决您的问题。
@Entitypublic class Address { @Id int id; String street;}@SqlResultSetMapping(name="PersonDTOMapping", classes = { @ConstructorResult(targetClass = PersonDTO.class, columns = {@ColumnResult(name="name"), @ColumnResult(name="street")} )})@Entitypublic class Person { @Id int id; String name; Address address; } public class PersonDTO { String name; String street; public PersonDTO(String name, String street) { this.name = name; this.street = street; }}// usageQuery query = em.createNativeQuery( "SELECt p.name AS name, a.street AS street FROM Person p, Address a WHERe p.address_id=a.id", "PersonDTOMapping");List<PersonDTO> result = query.getResultList();请注意,别名(AS name和AS street)必须与@ColumnResults 中的名称匹配。该示例已针对Ecliselink 2.5.1进行了测试。



