Как мы получаем ResultSet в желаемом формате, когда извлекаемые поля поступают как часть запроса в данных весны jpa? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть объект с примерно 20 столбцами. В любой момент времени я не хочу извлекать все столбцы, а только выбранные столбцы, и я не знаю, какими могут быть эти столбцы, поскольку они поступают из запроса в качестве параметра. Как правильно достичь этого?

Я пытался реализовать это, используя собственные запросы, но с трудом анализировал набор результатов в желаемом формате ответа.

Query query = entityManager.createNativeQuery("SELECT name, model, desc FROM Product");
query.getResultList();

Теперь этот набор результатов настолько универсален, что я не могу преобразовать его в требуемую модель продукта, передавая Product.class в качестве параметра в запрос, поскольку он выбирает только 3 поля, а остальные отсутствуют. И у меня не может быть предварительно определенной проекции, поскольку она исходит из запроса API в качестве параметра.

Ответы [ 3 ]

0 голосов
/ 28 июня 2019

Предположим, что вам нужны другие поля, просто добавьте аннотацию @JsonInclude в верхней части класса сущности.

@JsonInclude(Include.NON_NULL)
public class Product{ 

Редактировать: создать конструктор в классе продукта

public Product(String name,String model,String desc){
   this.name=name;
   this.model=model;
   this.desc=desc;
}

 String query = String.format("select new pakageName.Product(e.name, e.model,e.desc) from Product as e);
 Query queryObject = (Query) em.createQuery(query);    
 List<Product> result = queryObject.getResultList();

Собственный запросвозвращает только объект.Попробуйте это, как указано ниже.

0 голосов
/ 01 июля 2019

Вот как я это сделал.По-видимому, вы можете получить ResultSet в виде списка Tuple.Мне просто нужно было перебрать этот список и создать карту для каждой записи в наборе результатов, чтобы я мог отобразить ее с помощью ModelMapper.Здесь теги представляют собой список столбцов для чтения.

    Query query = entityManager.createNativeQuery(preparedQuery,Tuple.class);
    List<Tuple> resultList = query.getResultList();
    List<Product> resultDto = new ArrayList<>();
    for (Tuple tuple : resultList) {
        HashMap<String, Object> data = new HashMap<>();
        for (String tag : tags) {
            data.put(tag, tuple.get(tag));
        }
        resultDto.add(mapper.map(data, Product.class));
    }
    return resultDto;

Спасибо всем, кто откликнулся на это.

0 голосов
/ 28 июня 2019

Ответ вы получите в этом формате Карта .
Создайте класс ProductDTO и преобразуйте эту карту в ProductDTO с помощью помощь ModelMapper.

ProductDTO productDto = new ModelMapper().map(resultMap, ProductDTO.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...