JPA-在非实体类中联接两个表
我是新手,尝试过使用google,但无法解决我的查询。请帮忙。
我正在尝试在POJO类PersonC中映射两个实体:PersonA和Person
@Entityclass PersonA{
String sample_field;
}
@Entity
class Person{
String id;
String name;
}
以上两个是jpa的实体。
现在,我想将它们合并为一个pojo类。class PersonC
{
Strind id;
String address;
}
尝试下面的代码,但是当我尝试获取“地址/外键”字段时,它不起作用。
@SqlResultSetMapping(name="PersonC", classes = {
@ConstructorResult(targetClass = PersonC.class,
columns = {@ColumnResult(name="name")
, @ColumnResult(name="address")
)}
我应该在哪里为上面的哪个类定义@SqlResultSetMapping?)})
回答:
@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")}
)}
)
@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<PersonDTO> result = query.getResultList();
请注意,别名(AS name和AS street)必须与@ColumnResults 中的名称匹配。该示例已针对Ecliselink 2.5.1进行了测试。
以上是 JPA-在非实体类中联接两个表 的全部内容, 来源链接: utcz.com/qa/397676.html