Как поместить таблицы БД в свойства в DTO, используя JPA - PullRequest
1 голос
/ 16 мая 2019

Вот пример кода метода, который я использовал.

@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> {}

Другими словами, я хочу поместить все две таблицы в коллекцию.

Это ответ Iожидайте.

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

В настоящее время я делаю два выбора таким образом, и я думаю, что это не очень хорошая идея.

Я хотел бы найти способ выбрать один раз, используя стиль JPA.

1 Ответ

0 голосов
/ 18 мая 2019

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 Data JPA:

Прогнозы на основе классов (DTO) https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections.dtos

...