Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
2 / 2 / 3
Регистрация: 09.04.2013
Сообщений: 43

Маппинг запроса в DTO

27.08.2017, 12:24. Показов 6009. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Столкнулся с определенными трудностями. Приложение написано на spring boot + spring data.

Вытаскиваю данные из таблицы при помощи jpa. Собственно в чем проблема, в репозитории я делаю нативный запрос(ну либо через критерию можно, не суть), суть в том, что в запросе тянутся данные из двух таблиц. По умолчанию jpa сует все в object, а мне хотелось бы, чтобы у меня результат запроса ложился не в Object, а была DTOшка. Следовательно вопрос, как результат запроса замапить в DTO?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2017, 12:24
Ответы с готовыми решениями:

Dto-Entity mapper
Привет. Есть дто, есть энтити, надо одно копировать в другое, ну и обратно. Писать кучу геттеров/сеттеров ломает, да и не красиво. ...

Spring Boot Entity and DTO
Добрый день, уважаемые коллеги :senor: Потратил весь день, не могу найти ни где пример, что бы использовался и @Entity и DTO. ...

Возможно ли соеденить несколько одинаковых DTO ?
К примеру, Школа, есть списки классов, у них будут одинаковые DTO, примерно такие: public class ClassADTO { private String...

10
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
27.08.2017, 13:16
Во первых я бы посоветовал сначала в JPA разобраться потом в spring data. Во вторых не понимаю как вы получаете object используя JPA??? Вот пример на критерии если нужно могу и сущности повылаживать. Тут тоже из двух таблиц запрос
Java
1
2
3
4
5
6
7
8
9
10
11
    public CheckDTO getInfoForCheck(Long id) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<CheckDTO> criteria = cb.createQuery(CheckDTO.class);
        Root<Order> order = criteria.from(Order.class);
        criteria.select(cb.construct(CheckDTO.class, order.get("id"), order.get("table").get("floor").get("floorName"),
                order.get("table").get("number"), order.get("creationDate"), order.get("totalAmount"),
                order.get("discountAmount"))).
                where(cb.equal(order.get("id"), id));
        TypedQuery<CheckDTO> query = em.createQuery(criteria);
        return query.getSingleResult();
    }
0
2 / 2 / 3
Регистрация: 09.04.2013
Сообщений: 43
27.08.2017, 18:43  [ТС]
Вообще у меня такая штука:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
 
import java.util.Date;
import java.util.List;
 
@Repository
public interface Repository extends JpaRepository<Model, Long> {
 
    @Query(value = "select count(*), hicn.name \n" +
            "from \n" +
            "  table1 cid, \n" +
            "  table2 hicn \n" +
            "where TRUNC(cid.CREATED_WHEN) = TRUNC(?) \n" +
            "  and hicn.ID = cid.ID\n" +
            "group by  hicn.name", nativeQuery = true)
    List<Object> findAllData(Date currentDate);
}
Не совсем понимаю, как оно может не Object возвращать? Вот не Object оно будет возвращать, если замапить запрос на dto. Вот вопрос как это сделать. Есть SqlResultMapper что-то такое или это не то? Ну в общем над понять как это делается.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
28.08.2017, 00:13
https://stackoverflow.com/ques... ntity-pojo
0
2 / 2 / 3
Регистрация: 09.04.2013
Сообщений: 43
28.08.2017, 09:35  [ТС]
Да видел я это на стаке, но не понятно как для DTO это использовать, я попробовал ниче не получилось.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
28.08.2017, 09:48
Цитата Сообщение от CrashOverride Посмотреть сообщение
Да видел я это на стаке, но не понятно как для DTO это использовать, я попробовал ниче не получилось.
наверно потому, что луна в юпитере нынче
Возможно кто-то скажет конкретнее, если код покажешь
0
2 / 2 / 3
Регистрация: 09.04.2013
Сообщений: 43
28.08.2017, 10:04  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
наверно потому, что луна в юпитере нынче
Возможно кто-то скажет конкретнее, если код покажешь
Выше код репо. Что еще нужно? В DTO - 2 поля. Соответственно запрос также вытаскивает из бд 2 колонки. Все примеры по sqlsetresultmapper пляшут от entity, поэтому я не понимаю как для DTO сделать это. Какой еще код нужен-то?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
28.08.2017, 10:20
Цитата Сообщение от xoraxax Посмотреть сообщение
я попробовал ниче не получилось.
вот этот, очевидно же
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
28.08.2017, 10:35
CrashOverride,

Java
1
2
3
4
5
6
7
query=" select new com.test.live.dto.IssuesDto (idc.id, dep.department, iss.issueName, 
               cat.issueCategory, idc.issueDescriptor, idc.description) 
            from Department dep 
            inner join dep.issues iss 
            inner join iss.category cat 
            inner join cat.issueDescriptor idc 
            where idc.id in(?1)")
вот код по ссылке выше. Этот подход работает. Сделайте как тут и покажите какая ошибка если что-то не получится (конструктор не забудьте создать)
0
2 / 2 / 3
Регистрация: 09.04.2013
Сообщений: 43
28.08.2017, 12:57  [ТС]
В общем штука какая, есть у меня такая Dto:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
import lombok.Data;
 
@Data
public class DataDto {
    private String name;
    private Long count;
 
    public DataDto(String name, Long count) {
        this.name = name;
        this.count = count;
    }
 
}
и собственно сам репо с запросом:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
// import ...
 
import java.util.Date;
import java.util.List;
 
@Repository
public interface DataModelRepository extends JpaRepository<DataModel, Long> {
 
    @Query(value = "select count(*), hicn.name \n" +
            "from \n" +
            "  table1 cid, \n" +
            "  table2 hicn \n" +
            "where TRUNC(cid.CREATED_WHEN) = TRUNC(?) \n" +
            "  and hicn.ID = cid.ID\n" +
            "group by  hicn.name", nativeQuery = true)
    List<Object> findAllData(Date currentDate);
 
//хотелось бы чтобы было так...
//List<DataDto> findAllData(Date currentDate);
}
Вот как мне результат запроса положить в dto? Попробовал разобраться с @NamedQuery но все примеры для entity, а не для dto.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
28.08.2017, 15:39
Цитата Сообщение от CrashOverride Посмотреть сообщение
Вот как мне результат запроса положить в dto?
У вас проблемы с пониманием прочитанного? Выше дан пример как маппить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2017, 15:39
Помогаю со студенческими работами здесь

FormData в объект DTO Spring mvc
Есть такое DTO: public class OwnerProfileUpdateDTO { private String firstName; private String lastName; ...

Преобразовать ответ с JSON объектом в DTO
Я использую API которое возвращает JSON объект такого вида: { &quot;response&quot;: { &quot;GeoObjectCollection&quot;: { ...

Использование одного DTO для разных таблиц
Вопрос к опытным программистам. Eсть похожие таблицы БД и есть возможность использования одного расширенного DTO, нужно ли так делать или...

Маппинг в spring mvc и сервлетах
В spring mvc использую стандартный диспатчер сервлет. в сервлетах функции мапятся аннотацией @WebServlet(&quot;/list&quot;) то же самое...

Hibernate: маппинг many-to-many работает только в одну сторону
Есть сущности Автобус и Водитель, связь многие ко многим: Bus.java: @Entity @Table public class Bus implements Serializable { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru