本文共 1079 字,大约阅读时间需要 3 分钟。
@SqlResultSetMapping可以放在任何实体类中(不要注释POJO – 它不起作用).在JPA 2.1版中添加了使用@ConstructorResult映射到POJO类.与映射一起使用的POJO必须具有正确的构造函数.
All columns corresponding to arguments of the intended constructor must be specified using the columns element of the ConstructorResult annotation in the same order as that of the argument list of the constructor.
请参考以下示例查询用法并相应地计算您的案例.
@Entity
public class Address {
@Id int id;
String street;
}
@SqlResultSetMapping(name="PersonDTOMapping",
classes = {
@ConstructorResult(targetClass = PersonDTO.class,
columns = {@ColumnResult(name="name"), @ColumnResult(name="street")}
)}
)
@Entity
public 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;
}
}
// usage
Query 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 result = query.getResultList();
请注意,别名(AS名称和AS街道)必须与@ColumnResults中的名称匹配.
该示例针对Ecliselink 2.5.1进行了测试.
转载地址:http://swgzs.baihongyu.com/