Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Подстановка JPA репозитория в зависимости от профиля / 25 сообщений из 37, страница 1 из 2
31.03.2019, 13:30
    #39794233
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
Используются две бд: 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
31.03.2019, 13:38
    #39794236
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
Tsyklop,

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



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

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

Так и сделал. Но почему-то мне это не очень нравится. запросов много получается.
...
Рейтинг: 0 / 0
05.04.2019, 11:22
    #39797091
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
Сделай через 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
05.04.2019, 11:28
    #39797097
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
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
05.04.2019, 11:31
    #39797100
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
mayton,

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

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

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

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

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



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

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

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

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

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

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

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

Не ленись поднимай среду с настоящей БД.
...
Рейтинг: 0 / 0
05.04.2019, 12:49
    #39797206
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
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
05.04.2019, 13:06
    #39797221
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подстановка JPA репозитория в зависимости от профиля
TsyklopKachalov- да, как то так
но у меня JpaRepository. Все sql должны быть до компиляции.а что, if условия не компилируются?)))
Другую фразу придумай.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подстановка JPA репозитория в зависимости от профиля / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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