|
|
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Есть двухсторонний мапинг: Код: java 1. 2. 3. 4. 5. 6. 7. и: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. В результате при вызове: 1. Код: java 1. получаю 2 запроса: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Почему 2 понятно, потому что fk находится в таблице passport, т.е. хибернейту для построения прокси необходимо сделать запрос в passport и удостовериться есть ли там запись для текущего клиента. С другой стороны, если сделать: 2. Код: java 1. идет один запрос, а если добавляю: Код: java 1. 2. Летит 3 запроса, что как бы тоже понятно почему(1+2 случай). Как оптимизировать, чтобы уменьшить количество запросов? @PrimaryKeyJoinColumn для случая 1. не подходит, т.к. pk у passport и client могут не совпадать Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 11:45 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, 1 чем тебя пугают лишние запросы? 2 откажись от хибера - будет все под твоим контролем, а не под контролем прокладки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:11 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulTКак оптимизировать, чтобы уменьшить количество запросов? - проектировать по методологии. - сначала значимые для бизнеса сущности. Т.е. связь один к одному не рекомендуется. Если паспорт один, то его в таблу клинета. Если много и он ВАЖЕН для бизнеса, то делать отдельно и связь будет один ко многим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:21 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulTКак оптимизировать, чтобы уменьшить количество запросов? - проектировать по методологии. - сначала значимые для бизнеса сущности. Т.е. связь один к одному не рекомендуется. Если паспорт один, то его в таблу клинета. Если много и он ВАЖЕН для бизнеса, то делать отдельно и связь будет один ко многим. - проектировать по методологии - это как? паспорт один, в этом случае не понятно где лучше хранить fk, в таблице client(passport_id) или в таблице passport(client_id) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:30 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяJulT, 1 чем тебя пугают лишние запросы? 2 откажись от хибера - будет все под твоим контролем, а не под контролем прокладки 1. ну производительность и все такое 2. радикально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:31 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulTпаспорт один, в этом случае не понятно где лучше хранить fk, в таблице client(passport_id) или в таблице passport(client_id) вы таблички в БД своего маппинга видите? Если да, то приведите тут реальную схему БД. Если сущность клиент одна, то все реквизиты паспорта переходят в класс Person как обычные поля - возраст - пол - код документа (FK на типы удостоверения) - номер\серия документа - ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:34 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulTвадяJulT, 1 чем тебя пугают лишние запросы? 2 откажись от хибера - будет все под твоим контролем, а не под контролем прокладки 1. ну производительность и все такое 2. радикально вот для производительности и см. п. 2 хибер сам по себе дополнительный код, выполнение которого дополнительный тормоз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:39 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, если не заходтите как выше, то пробуйте: Для Person - аннотации: @NotNull @OneToOne(cascade = CascadeType.ALL) @JoinColumn (name = "passportId", referencedColumnName = "id") private passport passport; ------------------------------ Для passport - аннотации: @NotNull @OneToOne (cascade= CascadeType.ALL) @JoinColumn (name = "personId", referencedColumnName = "id") private Person person; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:41 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадя, убрать хибер тут вроде не рассматриваем( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:42 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123, к сожалению.... имея опыт работы с базами, я с жалостью смотрю посты про хибер. отказавшись от него всё решается намного проще и быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 12:50 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяимея опыт работы с базами уже говорил. Опыт работы по Java направлениям тоже интересен. Поверь и не флуди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 13:05 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, итого 3 вар-та по приоритетам: - 1 сущность и 1 табличка в БД (1 класс) - 2 сущности и 1 табличка в БД (2 класса + Embedded) - 2 сущности и 2 табличка в БД (2 класса + One to One) Зависит от бизнеса, но чем выше тем проще БД. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 13:15 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, итого 3 вар-та по приоритетам: - 1 сущность и 1 табличка в БД (1 класс) - 2 сущности и 1 табличка в БД (2 класса + Embedded) - 2 сущности и 2 табличка в БД (2 класса + One to One) Зависит от бизнеса, но чем выше тем проще БД. Удачи! Спасибо! А подскажите еще такой момент: Код: java 1. 2. 3. стоит cascade = CascadeType.ALL, т.е. при удалении клиента хочу чтобы удалялся passport все прекрасно работает когда в public class Passport стоит: Код: java 1. 2. 3. но как только добавила @JoinColumn(name = "client_id", nullable = false, unique = true), выскакивает ошибка при удалении: clientRepository.delete(15L); - Column 'client_id' cannot be null снимать ограничение не хочется, как в таком случае поступают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 14:06 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, вообще то, я просил схему БД-табличек. Непонятно что вы решили. В конечном итоге - БД главная. А хибер, маппинг и Java - обслуга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 14:18 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, вообще то, я просил схему БД-табличек. Непонятно что вы решили. В конечном итоге - БД главная. А хибер, маппинг и Java - обслуга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 14:26 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, вы оптимизируете запросы к БД. - какой смысл номер паспорта держать в отдельной, если паспорт у вас всегда один? - даже если нужен класс для Java паспорта, то есть embedded (табличка будет одна) - код клиента не совпадает с кодом паспорта, хотя отношение одно к одному. Будут до запросы из за этой неразберихи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 14:47 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, passport.number перенести в client.passport_number ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 14:50 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, passport.number перенести в client.passport_number ? перенести можно, это же игрушечный пример, мне просто хочется разные варианты попробовать про эмбедед знаю. а если в будущем паспорт будет не один? вот именно из таких соображений я решила отдельную табличку сделать. "код клиента не совпадает с кодом паспорта" - вы имеете ввиду client id не совпадает с passport id? а почему он должен совпадать? если потребуют заводить клиента без паспорта, с возможностью добавить паспортные данные позже, то будет ситуация когда они будут разными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:02 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, не пишите на будущее - всё равно переписывать)). (с) - если на будущее, то паспортов много на одного клиента. Отношение Один ко Многим или Много к одному. Со всем вытекающими и маппингом. Ещё заведите таблу на Смену Фамилии на будущее и Смену пола. ЗЫ Если не поняли, то маппинг Один к Одному в БД не приветствуется. Ограничивать хотелки и Модель ваша прямая обязанность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:14 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, не пишите на будущее - всё равно переписывать)). (с) - если на будущее, то паспортов много на одного клиента. Отношение Один ко Многим или Много к одному. Со всем вытекающими и маппингом. Ещё заведите таблу на Смену Фамилии на будущее и Смену пола. ЗЫ Если не поняли, то маппинг Один к Одному в БД не приветствуется. Ограничивать хотелки и Модель ваша прямая обязанность. Поняла, спасибо) Но все же, если связь один к одному, а полей не 1 как в passport, а 100, например, не хранить же мне все эти 100 полей в client, это уже не таблица, а гармонь какая-то)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:35 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulT, мне пофлудить или и так преимущества прокладки видны :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:38 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяJulT, мне пофлудить или и так преимущества прокладки видны :) а что вы предлагаете? jdbcTemplate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:42 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulTесли связь один к одному, а полей не 1 как в passport, а 100, например, не хранить же мне все эти 100 полей в client, это уже не таблица, а гармонь какая-то)) ваш вопрос задают через раз в ветке Оракле - хоть 500 полей будет нормально. С точки зрения загрузки побайтовой, то это пшик. Т.к. поля простого типа. Исходите из бизнеса, но зазря сущностей не плодите. Замучитесь на JOIN. ЗЫ. Для пробы я написал выше 3 варианта. 1 и 2 нет никаких JOIN и сущности грузятся автоматически. п.п.3 я не очень понимаю ценности. п.п.4 полноценная сущность со своим Id и FK. Отработана годами. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39229166&tid=2124106]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 380ms |

| 0 / 0 |
