您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JPA-在非实体类中联接两个表

JPA-在非实体类中联接两个表

@sqlResultSetMapping可以放在任何实体类中(不要为POJO注释-它不起作用)。@ConstructorResult在JPA 2.1版中添加了映射到POJO类。与映射一起使用的POJO必须具有正确的构造函数

必须使用ConstructorResult批注中的columns元素以与构造函数的参数列表相同的顺序指定与预期构造函数的参数对应的所有列。

请参考以下查询用法示例,并据此解决您的问题。

@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<PersonDTO> result = query.getResultList();

请注意,别名(AS name和AS street)必须与@ColumnResults 中的名称匹配。该示例已针对Ecliselink 2.5.1进行了测试。

其他 2022/1/1 18:16:06 有388人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶