如何使用 JPA 将数据库表放入 DTO 中的属性

How to put db tables into properties in DTO using JPA

这是我使用的方法的示例代码。

@Getter
@Setter
@AllArgsConstructor
public class MyDTO {
    private List<EntityA> listA;
    private List<EntityB> listB;
}

@RepositoryRestController
public class MyController {
    @Autowired
    private EntityARepository repositoryA;
    @Autowired
    private EntityBRepository repositoryB;

    @RequestMapping(method = RequestMethod.GET, value = "/getDTO")
    public MyDTO getDTO() {
        return new MyDTO(repositoryA.findAll(), repositoryB.findAll());
    }

}

@RepositoryRestResource
public interface EntityARepository extends JpaRepository<EntityA, Long> {}

@RepositoryRestResource
public interface EntityBRepository extends JpaRepository<EntityB, Long> {}

换句话说,我想将所有两个表都放入集合中。

这是我期待的回应。

{
    "listA" : [{.../* all EntityA */}],
    "listB" : [{.../* all EntityB */}]
}

我目前正在以这种方式进行两次select,我认为这不是一个好主意。

我想找到一种方法 select 一旦使用 JPA 样式。

JPA 允许您通过 new 和构造函数创建对象。

SELECT new MyDTO(o.prop1, o.prop2) FROM Object o

有关构造函数表达式,请参阅 JPQL 文档:

https://docs.oracle.com/html/E13946_04/ejb3_langref.html#ejb3_langref_constructor

Spring 数据 JPA 方法:

Class-based 预测 (DTO) https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections.dtos