Size: a a a

2021 February 17

AE

Alexandr Emelyanov in pro.jvm
Kabukiman
https://stackoverflow.com/questions/35005715/foreign-key-null-when-persisting-one-to-many-unidirectional-relationship

Вот у меня на что-то такое похожа проблема.

Есть Child {
@Column("field")
field;
}

Parent {
@OneToMany(mappedBy = "field", cascade all, orphan removal true)
Set<Child> set;
}

И вот тут при сохранении парента с сетом ФК в таблице null, даже если его в другой транзакции через РЕПО дёрнуть.
Это у тебя bidirectional
источник

AE

Alexandr Emelyanov in pro.jvm
Kabukiman
Господа, есть проблема с хибернейтом.
Есть unidirectional @OneToMany с каскадом all.
И есть отдельное вам к этой вложенной энтити с возможностью записи fk напрямую, через dto.

Если я пишу @OneToMany с mappedBy, то хибер не пишет fk, и вроде как не должен. Везде пишут, что нужен не mappedBy, который вообще для bidirectional, а @JoinColumn. Но @JoinColumn нельзя на поле, которое уже определено через @Column в дочерней энтити. Только если insertable и updatable false сделать.
Но тогда перестает работать апи на работу с этой энтити отдельно.

Кажется, что разработчики хибера хотели запретить то, что я хочу сделать.
Можно ли это реализовать без костылей?
Если нет, то какой костыль лучше?
У тебя в общем случае только два варианта, либо bidirectional с mappedBy, либо join column
источник

AE

Alexandr Emelyanov in pro.jvm
Иначе у тебя хибер не знает в какую колонку ставить ид родителя
источник

A

Aleksandr in pro.jvm
Банальный вопрос по поводу AOP, а то несколько давно уже с ним сталкивался 😅
Допустим, есть методы, которые вызывают некий API - `some.api.*.*(..)`

И есть всего 3 таких метода, но я хочу запретить одному из них выполнять аспект.

Вот что я написал:
```
@Before("execution(public * some.api.*.*(..)) && !execution(public * some.service.method3(..)")
```

Т.е я проставил два условия, но похоже так это не работает, или же я что-то упустил?
источник

SP

Sam Panza in pro.jvm
Aleksandr
Банальный вопрос по поводу AOP, а то несколько давно уже с ним сталкивался 😅
Допустим, есть методы, которые вызывают некий API - `some.api.*.*(..)`

И есть всего 3 таких метода, но я хочу запретить одному из них выполнять аспект.

Вот что я написал:
```
@Before("execution(public * some.api.*.*(..)) && !execution(public * some.service.method3(..)")
```

Т.е я проставил два условия, но похоже так это не работает, или же я что-то упустил?
Юнит тест напиши и проверь, делов-то. + idea инспектирует выражения в aspectj аннотациях, обругает если чо
источник

V

V in pro.jvm
Dima
оставлять просто идентификаторы,  агрузить рекурсивными запросами нативными
+, когда у меня была многоуровневая  структура парентов, решал через cte
источник

НБ

Никита Берегуля... in pro.jvm
Привет, я пишу доклад-статью по двум Java технологиям и результату их использованию на проекте. Если я не называю заказчика и компанию я не попадаю под NDA? Я понимаю что это немного оффтоп и лучше спросить на проекте так все специфично для компании, просто интересуюсь в целом по опыту 😅
источник

E

Evgeniy ♎️ in pro.jvm
по идее нет...если это не чтото уникально что все поймут
источник

ch

central hardware in pro.jvm
Никита Берегуля
Привет, я пишу доклад-статью по двум Java технологиям и результату их использованию на проекте. Если я не называю заказчика и компанию я не попадаю под NDA? Я понимаю что это немного оффтоп и лучше спросить на проекте так все специфично для компании, просто интересуюсь в целом по опыту 😅
лучше исходит из того что написано в самом NDA
источник

D

Dima in pro.jvm
Никита Берегуля
Привет, я пишу доклад-статью по двум Java технологиям и результату их использованию на проекте. Если я не называю заказчика и компанию я не попадаю под NDA? Я понимаю что это немного оффтоп и лучше спросить на проекте так все специфично для компании, просто интересуюсь в целом по опыту 😅
проконсультируйся с заказчиком и компанией
источник

D

Dima in pro.jvm
обычно всегда на встречу идут
источник

SP

Sam Panza in pro.jvm
Никита Берегуля
Привет, я пишу доклад-статью по двум Java технологиям и результату их использованию на проекте. Если я не называю заказчика и компанию я не попадаю под NDA? Я понимаю что это немного оффтоп и лучше спросить на проекте так все специфично для компании, просто интересуюсь в целом по опыту 😅
По факту написания отдавай юристам на ревью, той компании с которой ты nda подписывал. Если одобрят, то проси справку чтобы наверняка, если так уж боишься
источник

НБ

Никита Берегуля... in pro.jvm
Да, само собой, спасибо. Интересно как у других людей это происходило. Буду спрашивать у менеджмента
источник

РН

Роман Нагаев... in pro.jvm
Kabukiman
Господа, есть проблема с хибернейтом.
Есть unidirectional @OneToMany с каскадом all.
И есть отдельное вам к этой вложенной энтити с возможностью записи fk напрямую, через dto.

Если я пишу @OneToMany с mappedBy, то хибер не пишет fk, и вроде как не должен. Везде пишут, что нужен не mappedBy, который вообще для bidirectional, а @JoinColumn. Но @JoinColumn нельзя на поле, которое уже определено через @Column в дочерней энтити. Только если insertable и updatable false сделать.
Но тогда перестает работать апи на работу с этой энтити отдельно.

Кажется, что разработчики хибера хотели запретить то, что я хочу сделать.
Можно ли это реализовать без костылей?
Если нет, то какой костыль лучше?
советую заглянуть сюда
https://www.amazon.com/Java-Persistence-Hibernate-Christian-Bauer/dp/1617290459
половина этой книжки про самые разные способы маппингов(и не только) попробуй там поискать маппинг который тебе нужен

я не гуру гибернейта но кое какие шишки набил

в общем как мне кажется чтобы пазл сложился тебе нужно прочитать про:
1) маппинг твоей связи
2) жизненный цикл ентити и события
3) как каскадятся события
4) что такое овнер связи
5) что такое entityManager.getReference

вот моя версия почему не сохраняется pk
- овнер связи - потомок
- ты скорее всего для проверки создаёшь родителя и хочешь сразу привязать потомка который уже есть в базе
- хибер делает persist родителя
- persist каскадится на потомка который находится в состоянии managed или detached (что в таком случае произойдёт - хз, я думаю ничего), но тебе нужно обновить потомка, а для этого над ним нужно отдельно сделать merge после persist'a родителя

в общем если я угадал, попробуй убрать каскад, сделать persist родителя а потом merge потомка
источник

A

Aleksandr in pro.jvm
Sam Panza
Юнит тест напиши и проверь, делов-то. + idea инспектирует выражения в aspectj аннотациях, обругает если чо
Так вопрос то не в этом. Речь про то, что такая форма не работает, но я не понимаю почему. И инспектор ничего не подсвечивает
источник

KA

Kos A in pro.jvm
Коллеги, нужен совет. Удобно ли жить двум проектам (условно админка и витрина) с сильно совпадающей доменной моделью, вынесенной в отдельный проект? БД общая. Кажется разумным вынести дублирующиеся энтити, но может есть какие-то подводные камни..
источник

Lr

Larymar r.sorokin in pro.jvm
Kos A
Коллеги, нужен совет. Удобно ли жить двум проектам (условно админка и витрина) с сильно совпадающей доменной моделью, вынесенной в отдельный проект? БД общая. Кажется разумным вынести дублирующиеся энтити, но может есть какие-то подводные камни..
подводные очень простые
любое изменение триггерит сразу все
источник

KA

Kos A in pro.jvm
Но кажется, что это и плюс т.к. могут быть не согласованные изменения (в одном проекте поменяли, во втором забыли)
источник

РН

Роман Нагаев... in pro.jvm
Kos A
Коллеги, нужен совет. Удобно ли жить двум проектам (условно админка и витрина) с сильно совпадающей доменной моделью, вынесенной в отдельный проект? БД общая. Кажется разумным вынести дублирующиеся энтити, но может есть какие-то подводные камни..
погугли стратегическое проектирование (DDD) там можно увидеть какие варианты бывают, тогда можно  будет выбрать
источник

AY

Andrew Yatsenko in pro.jvm
Kos A
Но кажется, что это и плюс т.к. могут быть не согласованные изменения (в одном проекте поменяли, во втором забыли)
Проблема будет когда придется в одном проекте выпиливать то что добавили в другом
источник