@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进行了测试。



