Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Используются две бд: H2 и MariaDB. MariaDB - на проде, H2 - при разработке

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

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)
)


Штука в том что функция
DATEDIFF
в этих бд отличаются. в H2 три параметра, а в MariaDb два параметра.

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

Сам запрос считает разницу между двумя TIMESTAMP-ами.
31 мар 19, 13:30    [21848231]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3250
Tsyklop,

а JPA тут причем если у вас SDLC не поставлен?
31 мар 19, 13:38    [21848235]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Tsyklop
Как тут быть? Подумал за профиля в спринге

- вангую, что используется хибер, тогда:
Dialect.getDialect()
31 мар 19, 19:34    [21848373]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Kachalov
- вангую, что используется хибер, тогда:
Dialect.getDialect()


это где вызывать?
5 апр 19, 10:55    [21853686]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Андрей Панфилов
Tsyklop,
а JPA тут причем если у вас SDLC не поставлен?


не JPA, а Spring Data.
5 апр 19, 10:55    [21853688]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
профайлы не прошли.
5 апр 19, 10:56    [21853691]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Насколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.
5 апр 19, 11:06    [21853703]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton
Насколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.
ну или при разработке разрабатывать на аналогичной БД и не колупать мозги.
5 апр 19, 11:19    [21853725]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
mayton
Насколько я понял идет попытка использовать функцию DATEDIFF из разных диалектов SQL и разных имплементаций.
Можно от нее отказаться и вернуть результат обоих подзапросов в виде Timestamp и уже на уровне Java посчитать
разницу.


Так и сделал. Но почему-то мне это не очень нравится. запросов много получается.
5 апр 19, 11:19    [21853726]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Сделай через UNION ALL. Или как-то так

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 запрос.
5 апр 19, 11:22    [21853731]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
mayton
Сделай через UNION ALL. Или как-то так

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 запрос.


А как мне это вернуть в джаву? Репозиторий же работает с конкретной сущностью. А тут получается новая сущность или новый класс.
5 апр 19, 11:28    [21853743]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,

Я так понял, что ему нужен разный код в зависимости от того где он выполняется.
На проде одна бд и код А.
На работе другая бд и код для нее Б.
Так?
5 апр 19, 11:31    [21853746]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Другая бд и другой параметер. Если постгри, то там имя функции другое.
Что делать будем?
)))
5 апр 19, 11:34    [21853750]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,
Вот тебе вопрос в соседнюю тему).
5 апр 19, 11:37    [21853758]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Petro123
mayton,

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

Да никак по сути. Две разные БД. Это либо 100% работа через ORM. Либо поддержка 2х разных диалектов.

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

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

Тем более что в эпоху docker это уже вполне осуществимо и не проходит через анальные муки как 10 лет назад.
5 апр 19, 11:46    [21853783]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton
Собственно я вижу очень мало смысла в тестинге на H2 при условии что в проде будет МарияДБ. Это фигня
которая не натягивается ни на какие утверждения.
вот и про это. Весь смысл ОРМ уходит.
Тема - ерунда.
5 апр 19, 11:59    [21853815]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Tsyklop
Kachalov
- вангую, что используется хибер, тогда:
Dialect.getDialect()


это где вызывать?

- где запрос там условный переход, в зависимости от типа БД выполнять разные запросы.
5 апр 19, 12:00    [21853818]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Kachalov
где запрос там условный переход, в зависимости от типа БД выполнять разные запросы.
прямо в коде
if () sql = "sssss else sql =" & ddd
?
5 апр 19, 12:04    [21853827]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
mayton
Да никак по сути. Две разные БД. Это либо 100% работа через ORM. Либо поддержка 2х разных диалектов.

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

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

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


Верно. Разрабатываю на H2. на проде mariadb. ORM - 100%. На H2 не тесты, а эмуляция прода. H2 удобно поднять на разных машинах. А для марии надо подымать кучу всего.
5 апр 19, 12:25    [21853881]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Petro123
mayton,

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


Не код, а функция бд другая
5 апр 19, 12:26    [21853882]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Petro123
Kachalov
где запрос там условный переход, в зависимости от типа БД выполнять разные запросы.
прямо в коде
if () sql = "sssss else sql =" & ddd
?

- да, как то так
5 апр 19, 12:27    [21853885]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Kachalov
- да, как то так

но у меня JpaRepository. Все sql должны быть до компиляции.
5 апр 19, 12:32    [21853893]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Tsyklop
Верно. Разрабатываю на H2. на проде mariadb. ORM - 100%. На H2 не тесты, а эмуляция прода. H2 удобно поднять на разных машинах. А для марии надо подымать кучу всего.

Ты меня этим не разжалобишь. Мне тоже удобно Амазон тестировать в песочнице. Но это не работает в PROD дружище.
Вообще твои тесты только тогда будут иметь ценность когда они близки к реалиям. Фейковая SQL машина - это самообман.

Не ленись поднимай среду с настоящей БД.
5 апр 19, 12:47    [21853914]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Tsyklop
но у меня JpaRepository. Все sql должны быть до компиляции.

- взял пример из интернета (время гугления 3 сек):
@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-ом) переключаете, в зависимости от профиля
5 апр 19, 12:49    [21853921]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Tsyklop
Kachalov
- да, как то так

но у меня JpaRepository. Все sql должны быть до компиляции.
а что, if условия не компилируются?)))
Другую фразу придумай.
5 апр 19, 13:06    [21853951]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton
Ты меня этим не разжалобишь
)))
Мне недавно показали докер/контейнер с ораклом.
Вот бы такую задачу как у ТС чтобы потестить технологию.
5 апр 19, 13:09    [21853953]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1009
Tsyklop
mayton
Сделай через UNION ALL. Или как-то так

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 запрос.


А как мне это вернуть в джаву? Репозиторий же работает с конкретной сущностью. А тут получается новая сущность или новый класс.


mayton, так как?
5 апр 19, 13:29    [21853975]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Kachalov
сборщиком (например maven-ом) переключаете, в зависимости от профиля
упс. Дошло до меня. На прод другой код и другая сборка. Вот что имелось ввиду.
5 апр 19, 13:31    [21853980]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Petro123
Kachalov
сборщиком (например maven-ом) переключаете, в зависимости от профиля
упс. Дошло до меня. На прод другой код и другая сборка. Вот что имелось ввиду.

- это другой вариант (без if и определения диалекта Бд) и он конечно лучше: разные профили сборки в зависимости от целевой БД (примеры можно найти в интернет, это популярная тема, хотя обычно речь идет только о подключении разных JDBC-драйверов в проект)
5 апр 19, 13:58    [21854019]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Tsyklop
Tsyklop
пропущено...


А как мне это вернуть в джаву? Репозиторий же работает с конкретной сущностью. А тут получается новая сущность или новый класс.


mayton, так как?

А как ты раньше возвращал? Вьюшку создай.
5 апр 19, 14:00    [21854020]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Kachalov,
OK
3 варианта для ТС и разброс решений от оптимум до Г...
5 апр 19, 14:00    [21854022]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton,

Вьюшка 4е решение, но это код в базе и ОРМ может не работать на VIEW
5 апр 19, 14:01    [21854024]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
Petro123
mayton,

Вьюшка 4е решение, но это код в базе и ОРМ может не работать на VIEW

Почему?
5 апр 19, 14:10    [21854037]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5634
Petro123
до Г...

- чтобы научиться делать хорошо, надо сначала научиться делать плохо)
5 апр 19, 14:11    [21854038]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Kachalov
Petro123
до Г...

- чтобы научиться делать хорошо, надо сначала научиться делать плохо)
да!! Это мой принцип)).
5 апр 19, 14:30    [21854059]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
mayton
Petro123
mayton,

Вьюшка 4е решение, но это код в базе и ОРМ может не работать на VIEW

Почему?
реализует jpa hibernate?
А они сущности берут не на основе таблицы, а на основе view чере пень колоду.
Хотя можно сказать что это не полноценная сущность, а запрос в коллекцию. Тогда - ОК.
Привязка к коду в базе это понятно.
5 апр 19, 14:33    [21854063]     Ответить | Цитировать Сообщить модератору
 Re: Подстановка JPA репозитория в зависимости от профиля  [new]
mayton
Member

Откуда: loopback
Сообщений: 41056
В oracle я могу спокойно заменить
Table на view и ORM не заметит.
Мы часто пользовались этим методом.
И updates будут. И через instead триггер
Будет работать даже соединение таблиц.

Вобщем цена вопроса лежит в стоимости
Поддержки этого всего. Но принципиально - нет невозможного.
5 апр 19, 15:39    [21854154]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Java Ответить