Size: a a a

Spring Framework and more

2019 August 15

M

Mikhail in Spring Framework and more
***
Вакансии можно постить в основную группу если: 1) указаны зарплатные ожидания и одно из двух 2.1. это или релокация, 2.2.  или это удаленка. Если что то другое, то можно постить вакансии в @jvmtalk
***
источник

ЮС

Юлия Спиридонова in Spring Framework and more
спасибо. А это основная считается?
источник

ЮС

Юлия Спиридонова in Spring Framework and more
и релокация откуда куда?
источник

Ar

Arseny -> r2d2 in Spring Framework and more
да, это основная, jvmtalk - дополнительная.
релокация из РФ т.к. большинство участников отсюда.
источник

ЮЮ

Юрий Юрий in Spring Framework and more
Ruslan Stelmachenko
Больше нуля можно: @Positive. Меньше или равно 999 нельзя. Используйте BigDecimal вместо float. Либо пишите свой валидатор.
А чем поможет BigDecimal ?
источник

RS

Ruslan Stelmachenko in Spring Framework and more
тем, что @Min и @Max его поддерживают
источник

ЮЮ

Юрий Юрий in Spring Framework and more
Ruslan Stelmachenko
тем, что @Min и @Max его поддерживают
Спасибо за подсказку
источник

ЮС

Юлия Спиридонова in Spring Framework and more
Arseny -> r2d2
да, это основная, jvmtalk - дополнительная.
релокация из РФ т.к. большинство участников отсюда.
спасибо. Запостила там :)
источник

KS

Kamo Spertsyan in Spring Framework and more
Pavel Bukhmatov
Тогда только полный кусок кода поможет. Звучит как мистика какая-то)

Могу еще посоветовать брейкпоинт на момент проброски иключения поставить, и в этот момент посмотреть, есть ли данные в БД. Если есть - значит все-таки запись в 2 транзакции приосходит. Так все выглядит рабочим
Способ с брикпоинтом помог.

Проблема была вот в чём -
- перед сохранением телефона магазина я сохраняю его адреса - это тоже отдельные сущности в бд
- при сохранении адреса я предварительно проверяю, нет ли уже такого адреса, привязанного к этому магазину. Проверяю через интерфейс репозитория -
fun findByAddressAndShop(address: String, shop: Shop): List<ShopAddress>


До вызова этого метода магазин в бд не пишется, после этого - появляется. Я попробовал передавать туда не сам Shop, а его идентификатор:
fu
n findByAddressAndShopUuid(address: String, shopUuid: UUID): List<ShopAddress>
н
о это не дало результатов - он всё равно создаёт магазин. Я так понимаю, что для проверки он коммитит текущую транзакцию, чтобы получить идентификатор.
источник

KS

Kamo Spertsyan in Spring Framework and more
А вот теперь начались странности - даже когда я не использую магазин в поиске, он всё равно сохраняет в БД транзакцию.
Например, я ищу совпадения по телефону по всей базе через
fun findByPhone(phone: String): List<ShopPhone>

До вызова этого метода в базе магазина нет. После него - магазин сохраняется. Как быть?..
источник

PB

Pavel Bukhmatov in Spring Framework and more
Kamo Spertsyan
А вот теперь начались странности - даже когда я не использую магазин в поиске, он всё равно сохраняет в БД транзакцию.
Например, я ищу совпадения по телефону по всей базе через
fun findByPhone(phone: String): List<ShopPhone>

До вызова этого метода в базе магазина нет. После него - магазин сохраняется. Как быть?..
Я подозреваю, что все дело в том, что хибернейт (оверкомпликейтед говно) видит в качестве возвращаемоего результата ShopPhone, ShopAddress, в которых есть ссылка на Shop. А у тебя в контексте транзакции (вернее наверное в persistence контексте) update на сущность Shop.

Кажется контр-интуинтивным, но все же. А там есть где-нибудь query/native query?
источник

PB

Pavel Bukhmatov in Spring Framework and more
Как вариант - попробовать выпилить из тех сущностей сам Shop (ради эксперимента)
Ну и show-sql: true поставить, чтобы точно все видеть
источник

KS

Kamo Spertsyan in Spring Framework and more
Pavel Bukhmatov
Я подозреваю, что все дело в том, что хибернейт (оверкомпликейтед говно) видит в качестве возвращаемоего результата ShopPhone, ShopAddress, в которых есть ссылка на Shop. А у тебя в контексте транзакции (вернее наверное в persistence контексте) update на сущность Shop.

Кажется контр-интуинтивным, но все же. А там есть где-нибудь query/native query?
Гипотеза звучит разумно. Никакие query я не использую, все доверяю хибернейту.

А show-sql транзакции покажет?

Без Shop попробую, интересно, что получится
источник

KS

Kamo Spertsyan in Spring Framework and more
Но если это предположение подтвердится, то надо будет искать пути решения проблемы) я себе пока слабо представляю, как. Разве что заменить many to many связь на что то самописное
источник

PB

Pavel Bukhmatov in Spring Framework and more
Kamo Spertsyan
Гипотеза звучит разумно. Никакие query я не использую, все доверяю хибернейту.

А show-sql транзакции покажет?

Без Shop попробую, интересно, что получится
Транзакции нет. Но он может показать что-нибудь ещё интересное. Те же insertы, когда мы внутри транзакции.
Транзакции где-нибудь на уровне прокси надо смотреть, которую @Transactional создает
источник

PB

Pavel Bukhmatov in Spring Framework and more
А зачем создавать магазин, сохранять его, а затем проверять, нет ли адреса?)
Мне кажется можно сначала проверить, а потом вставить. Или там ещё какая-то логика?
источник

KS

Kamo Spertsyan in Spring Framework and more
Проверка на дубликат телефона происходит в методе создания телефона. Кажется, ему там и место. А при создании телефона, уже после проверок, ему надо указать сохранённый инстанс магазина. Можно, конечно, разделить создание на вадидацию и создание, но это уже будет не совсем интуитивно, имхо
источник

KS

Kamo Spertsyan in Spring Framework and more
Ну и с адресом такая же ситуация
источник

KS

Kamo Spertsyan in Spring Framework and more
Pavel Bukhmatov
Как вариант - попробовать выпилить из тех сущностей сам Shop (ради эксперимента)
Ну и show-sql: true поставить, чтобы точно все видеть
Без поля Shop работает, я убрал его в телефоне и обратную связь из магазина.
источник

PB

Pavel Bukhmatov in Spring Framework and more
Kamo Spertsyan
Без поля Shop работает, я убрал его в телефоне и обратную связь из магазина.
Бинго. Ну вот, теперь осталось понять, как отучить хибернейт от этой ереси)
источник