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

时间:2019-05-16 09:46:41

标签: java spring spring-data-jpa spring-data-rest

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

@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 */}]
}

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

我想找到一种使用JPA样式进行选择的方法。

1 个答案:

答案 0 :(得分:0)

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

Gson gson = new GsonBuilder().setDateFormat("E MMM dd HH:mm:ss Z yyyy").create();

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

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

Spring Data JPA方法:

基于类的投影(DTO)https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections.dtos