powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Подстановка JPA репозитория в зависимости от профиля
25 сообщений из 37, страница 1 из 2
Подстановка JPA репозитория в зависимости от профиля
    #39794233
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используются две бд: H2 и MariaDB. MariaDB - на проде, H2 - при разработке

Есть такой SQL запрос:

Код: sql
1.
2.
3.
4.
5.
SELECT
DATEDIFF('MINUTE', 
   (SELECT lch.created FROM ClientHistory lch WHERE lch.clientId = ?1 ORDER BY lch.id ASC LIMIT 1),
   (SELECT fch.created FROM ClientHistory fch WHERE fch.clientId = ?1 ORDER BY fch.id DESC LIMIT 1)
)



Штука в том что функция
Код: java
1.
DATEDIFF

в этих бд отличаются. в H2 три параметра, а в MariaDb два параметра.

Как тут быть? Подумал за профиля в спринге. И тут беда.

Сам запрос считает разницу между двумя TIMESTAMP-ами.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39794236
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

а JPA тут причем если у вас SDLC не поставлен?
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39794301
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopКак тут быть? Подумал за профиля в спринге
- вангую, что используется хибер, тогда:
Код: java
1.
Dialect.getDialect()
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797061
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- вангую, что используется хибер, тогда:
Код: java
1.
Dialect.getDialect()



это где вызывать?
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797063
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей ПанфиловTsyklop,
а JPA тут причем если у вас SDLC не поставлен?

не JPA, а Spring Data.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797065
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
профайлы не прошли.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797087
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНасколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.ну или при разработке разрабатывать на аналогичной БД и не колупать мозги.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797088
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНасколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.

Так и сделал. Но почему-то мне это не очень нравится. запросов много получается.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай через UNION ALL. Или как-то так

Код: sql
1.
2.
3.
4.
SELECT
   (SELECT lch.created FROM ClientHistory lch WHERE lch.clientId = ?1 ORDER BY lch.id ASC LIMIT 1) as lch_created,
   (SELECT fch.created FROM ClientHistory fch WHERE fch.clientId = ?1 ORDER BY fch.id DESC LIMIT 1) as fch_created
)



Был 1 запрос. И стал 1 запрос.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797097
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonСделай через UNION ALL. Или как-то так

Код: sql
1.
2.
3.
4.
SELECT
   (SELECT lch.created FROM ClientHistory lch WHERE lch.clientId = ?1 ORDER BY lch.id ASC LIMIT 1) as lch_created,
   (SELECT fch.created FROM ClientHistory fch WHERE fch.clientId = ?1 ORDER BY fch.id DESC LIMIT 1) as fch_created
)



Был 1 запрос. И стал 1 запрос.

А как мне это вернуть в джаву? Репозиторий же работает с конкретной сущностью. А тут получается новая сущность или новый класс.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797100
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я так понял, что ему нужен разный код в зависимости от того где он выполняется.
На проде одна бд и код А.
На работе другая бд и код для нее Б.
Так?
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797103
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другая бд и другой параметер. Если постгри, то там имя функции другое.
Что делать будем?
)))
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797108
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Вот тебе вопрос в соседнюю тему).
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mayton,

Я так понял, что ему нужен разный код в зависимости от того где он выполняется.
На проде одна бд и код А.
На работе другая бд и код для нее Б.
Так?
Да никак по сути. Две разные БД. Это либо 100% работа через ORM. Либо поддержка 2х разных диалектов.

Собственно я вижу очень мало смысла в тестинге на H2 при условии что в проде будет МарияДБ. Это фигня
которая не натягивается ни на какие утверждения.

Тоесть я-бы переписывал инты и енд-ту-енд чтобы тестовая среда тоже поднимала экземпляр Марии и не мучал
себя и других.

Тем более что в эпоху docker это уже вполне осуществимо и не проходит через анальные муки как 10 лет назад.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797135
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСобственно я вижу очень мало смысла в тестинге на H2 при условии что в проде будет МарияДБ. Это фигня
которая не натягивается ни на какие утверждения.вот и про это. Весь смысл ОРМ уходит.
Тема - ерунда.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797136
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopKachalov- вангую, что используется хибер, тогда:
Код: java
1.
Dialect.getDialect()



это где вызывать?
- где запрос там условный переход, в зависимости от типа БД выполнять разные запросы.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797144
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalovгде запрос там условный переход, в зависимости от типа БД выполнять разные запросы.прямо в коде
if () sql = "sssss else sql =" & ddd
?
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797172
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа никак по сути. Две разные БД. Это либо 100% работа через ORM. Либо поддержка 2х разных диалектов.

Собственно я вижу очень мало смысла в тестинге на H2 при условии что в проде будет МарияДБ. Это фигня
которая не натягивается ни на какие утверждения.

Тоесть я-бы переписывал инты и енд-ту-енд чтобы тестовая среда тоже поднимала экземпляр Марии и не мучал
себя и других.

Тем более что в эпоху docker это уже вполне осуществимо и не проходит через анальные муки как 10 лет назад.

Верно. Разрабатываю на H2. на проде mariadb. ORM - 100%. На H2 не тесты, а эмуляция прода. H2 удобно поднять на разных машинах. А для марии надо подымать кучу всего.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797173
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123mayton,

Я так понял, что ему нужен разный код в зависимости от того где он выполняется.
На проде одна бд и код А.
На работе другая бд и код для нее Б.
Так?

Не код, а функция бд другая
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797175
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Kachalovгде запрос там условный переход, в зависимости от типа БД выполнять разные запросы.прямо в коде
if () sql = "sssss else sql =" & ddd
?
- да, как то так
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797181
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- да, как то так
но у меня JpaRepository. Все sql должны быть до компиляции.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopВерно. Разрабатываю на H2. на проде mariadb. ORM - 100%. На H2 не тесты, а эмуляция прода. H2 удобно поднять на разных машинах. А для марии надо подымать кучу всего.
Ты меня этим не разжалобишь. Мне тоже удобно Амазон тестировать в песочнице. Но это не работает в PROD дружище.
Вообще твои тесты только тогда будут иметь ценность когда они близки к реалиям. Фейковая SQL машина - это самообман.

Не ленись поднимай среду с настоящей БД.
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797206
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopно у меня JpaRepository. Все sql должны быть до компиляции.
- взял пример из интернета (время гугления 3 сек):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Repository
@Transactional(readOnly = true)
public class EmployeeRepositoryImpl implements EmployeeRepositoryCustom {

    @PersistenceContext
    EntityManager entityManager;

    @Override
    public List<Employee> getFirstNamesLike(String firstName) {
        Query query = entityManager.createNativeQuery("SELECT em.* FROM spring_data_jpa_example.employee as em " +
                "WHERE em.firstname LIKE ?", Employee.class);
        query.setParameter(1, firstName + "%");
        return query.getResultList();
    }
}


добавить сюда if, а запросы хранить в каком нибудь properties файле. Кстати тоже вариант - запросы храните в файлах, а сборщиком (например maven-ом) переключаете, в зависимости от профиля
...
Рейтинг: 0 / 0
Подстановка JPA репозитория в зависимости от профиля
    #39797221
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopKachalov- да, как то так
но у меня JpaRepository. Все sql должны быть до компиляции.а что, if условия не компилируются?)))
Другую фразу придумай.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Подстановка JPA репозитория в зависимости от профиля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]