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

Откуда: Украина
Сообщений: 968
Используются две бд: 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
Сообщений: 3182
Tsyklop,

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

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

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

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


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

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


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

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

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

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

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


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

Откуда: loopback
Сообщений: 39870
Сделай через 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

Откуда: Украина
Сообщений: 968
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)
Сообщений: 37971
mayton,

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

Откуда: Москва
Сообщений: 5611
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)
Сообщений: 37971
Tsyklop
Kachalov
- да, как то так

но у меня JpaRepository. Все sql должны быть до компиляции.
а что, if условия не компилируются?)))
Другую фразу придумай.
5 апр 19, 13:06    [21853951]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить