Size: a a a

Spring Framework and more

2020 July 08

A

Anton in Spring Framework and more
Aleksander Lemyagov
Хорошо. Как тогда сделать уникальную выборку по одной колонке?
В DTO одноколоночный
источник

VS

Vitaly Sirotkin in Spring Framework and more
ну или можно по классике, джоином
источник

РН

Роман Нагаев... in Spring Framework and more
Aleksander Lemyagov
Хорошо. Как тогда сделать уникальную выборку по одной колонке?
можно через jpql, distinct там есть https://vladmihalcea.com/jpql-distinct-jpa-hibernate/
но важный момент, если ты используешь jpa думай не таблицами и колонками, думай объектами и полями соотносящимися с таблицами и колонками, это важно
источник

A

Anton in Spring Framework and more
Vitaly Sirotkin
ну или можно по классике, джоином
Distinct из join? Это как?
источник

РН

Роман Нагаев... in Spring Framework and more
и такие выборки, так как они один фиг не возвращают сущности, нет особого смысла протаскивать через jpa, нативным запросом наверное будет проще
источник

VS

Vitaly Sirotkin in Spring Framework and more
Anton
Distinct из join? Это как?
=\
делаешь подзапрос с group by и нужной тебе петрушой, а потом его джоинишь
источник

A

Anton in Spring Framework and more
Vitaly Sirotkin
=\
делаешь подзапрос с group by и нужной тебе петрушой, а потом его джоинишь
Это можго и без join, оконными функциями сделать. Но причем тут дистинкт? Допустим в таблице person есть id и age (возраст).
Дистинкт по возрасту схватит первый попавшийся id через join?

Или все таки нужнен только список возрастов? Тогда если из подзапроса
rownum() over(..group by age) RN выбрать RN = 1, вполне заменит distinct.  В т.ч. и аыборке с id и другими полями.
источник

VS

Vitaly Sirotkin in Spring Framework and more
Anton
Это можго и без join, оконными функциями сделать. Но причем тут дистинкт? Допустим в таблице person есть id и age (возраст).
Дистинкт по возрасту схватит первый попавшийся id через join?

Или все таки нужнен только список возрастов? Тогда если из подзапроса
rownum() over(..group by age) RN выбрать RN = 1, вполне заменит distinct.  В т.ч. и аыборке с id и другими полями.
ему надо чтобы было универсально, я предолжил универсальный вариант.
источник

A

Anton in Spring Framework and more
Vitaly Sirotkin
ему надо чтобы было универсально, я предолжил универсальный вариант.
Я про join для себя хочу понять
SELECT c FROM tbl GROUP BY c
Зачем join?
источник

VS

Vitaly Sirotkin in Spring Framework and more
Anton
Я про join для себя хочу понять
SELECT c FROM tbl GROUP BY c
Зачем join?
например чтобы не засовывать все до единой колонки, которые нужны в выборке, в group by. ему например надо найти самый последний по timestamp элемент таблицы сгруппированный по какому то признаку, а потом вывести всю инфу по нему. для такого делают подзапрос
источник

OP

Oleg Pavl in Spring Framework and more
Народ, такой вопрос:
Пишу спринг бут проект, для тестов подключил H2 db, c такими пропертями:
////////////////////////////////////////////////////////
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none
///////////////////////////////////////////////////////
Для создания и наполнения таблиц создал в тестовых ресурсах файлы schema.sql и data.sql, которые наполняют БД.
////////////////////////////////////////////////////////
Проблема в том, что когда стартует ВТОРОЙ тест, который поднимает тестовый контекст, то второй раз выполнятся скрипты в schema.sql и data.sql, а содержимое H2 не сбрасывается и у меня вылетает ошибка, что такие таблицы уже существуют.
///////////////////////////////////////////////////////
Это нормальное поведение embeded баз данных, в sql нужно проверять существуют ли таблицы и очищать их от данных с предидущего теста или просто я что то не так настроил?
источник

e

evergood in Spring Framework and more
Oleg Pavl
Народ, такой вопрос:
Пишу спринг бут проект, для тестов подключил H2 db, c такими пропертями:
////////////////////////////////////////////////////////
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none
///////////////////////////////////////////////////////
Для создания и наполнения таблиц создал в тестовых ресурсах файлы schema.sql и data.sql, которые наполняют БД.
////////////////////////////////////////////////////////
Проблема в том, что когда стартует ВТОРОЙ тест, который поднимает тестовый контекст, то второй раз выполнятся скрипты в schema.sql и data.sql, а содержимое H2 не сбрасывается и у меня вылетает ошибка, что такие таблицы уже существуют.
///////////////////////////////////////////////////////
Это нормальное поведение embeded баз данных, в sql нужно проверять существуют ли таблицы и очищать их от данных с предидущего теста или просто я что то не так настроил?
в схеме можно прописать, чтобы таблицы дропались, если они существуют
источник

Д

Дима in Spring Framework and more
можно изменить spring.jpa.hibernate.ddl-auto=none на  spring.jpa.hibernate.ddl-auto=create
источник

Д

Дима in Spring Framework and more
тогда все с нуля создаваться будет
источник

Д

Дима in Spring Framework and more
я не спринг профешнл, поправите если чо
источник

OP

Oleg Pavl in Spring Framework and more
evergood
в схеме можно прописать, чтобы таблицы дропались, если они существуют
Уже начал так делать, но решил уточнить, может я просто H2 или хибер неправильно настроил. Я чет думал, что тестовая бд живет столько же, сколько и тестовый контекст.
источник

OP

Oleg Pavl in Spring Framework and more
Дима
можно изменить spring.jpa.hibernate.ddl-auto=none на  spring.jpa.hibernate.ddl-auto=create
Говрят плохая плохая практика хиберу делегировать создание таблиц.
источник

e

evergood in Spring Framework and more
Oleg Pavl
Уже начал так делать, но решил уточнить, может я просто H2 или хибер неправильно настроил. Я чет думал, что тестовая бд живет столько же, сколько и тестовый контекст.
https://stackoverflow.com/questions/34617152/how-to-re-create-database-before-each-test-in-spring/37246354 тут есть пара идей, я правда их не пробовал)
источник

OP

Oleg Pavl in Spring Framework and more
Спасибо, интересные варианты) Народное творчество процветает на стековерфлов конечно) Жаль по умолчанию нет какой то настройки.
источник

OP

Oleg Pavl in Spring Framework and more
Думаю меня все таки больше устроит в скрипте дропать таблице) Навешивание дополнительных аннотаций с пропертями думается мне чревато ошибками и новыми багами. Спасибо за помощь)
источник