|
|
|
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 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадямне пофлудить или и так преимущества прокладки видн прокладка причём, если маппинг неверен? Хибер сам БД не анализирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:46 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123JulTесли связь один к одному, а полей не 1 как в passport, а 100, например, не хранить же мне все эти 100 полей в client, это уже не таблица, а гармонь какая-то)) ваш вопрос задают через раз в ветке Оракле - хоть 500 полей будет нормально. С точки зрения загрузки побайтовой, то это пшик. Т.к. поля простого типа. Исходите из бизнеса, но зазря сущностей не плодите. Замучитесь на JOIN. ЗЫ. Для пробы я написал выше 3 варианта. 1 и 2 нет никаких JOIN и сущности грузятся автоматически. п.п.3 я не очень понимаю ценности. п.п.4 полноценная сущность со своим Id и FK. Отработана годами. IMHO ок, спасибо!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 15:57 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
JulTвадяJulT, мне пофлудить или и так преимущества прокладки видны :) а что вы предлагаете? jdbcTemplate? можно и так исключить хибер вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:04 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяисключить хибер вообще можно подумать в access таблы 1 к 1 имеет смысл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:11 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123вадяисключить хибер вообще можно подумать в access таблы 1 к 1 имеет смысл имеют смысл в любом месте если это обусловлено логикой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:14 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяимеют смысл в любом месте если это обусловлено логикой. с хибером и ОРМ так же)) - дипломат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:17 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Petro123вадяимеют смысл в любом месте если это обусловлено логикой. с хибером и ОРМ так же)) - дипломат. только без хибера можно обойтись в любом случае здесь же я встречаю мазохистов, которые получают катарсис от проблем с ним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:25 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадяPetro123пропущено... с хибером и ОРМ так же)) - дипломат. только без хибера можно обойтись в любом случае здесь же я встречаю мазохистов, которые получают катарсис от проблем с ним Если не знаешь БД и SQL то конечно никакой хибер не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 16:58 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадя+100500 А вот когда знаешь... то орм отличный помощник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 17:14 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
Я-бы сказал что SQL постоянно и везде всплывает. Даже если его напрямую не использовать то всё равно где-то что-то стрельнет. Какой-то UI потребует от тебя ввести расчет какой-нить "перцентили" в виде части SQL выражения и ты будешь кусать локти и чувствовать себя двоешником что в школе не учил арифметику и все такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 17:15 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
забыл никвадя+100500 А вот когда знаешь... то орм отличный помощник это , если и помошник, то очень недоразвитый... не может он знать все тонкости и специфики баз. поэтому использует только верхушки. а в знании конкретно каждой реализации баз (mysql, mssql и пр.) и есть мастерство использования данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 17:24 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадя, я бы тебе поверил, если бы ты не был против: Хибера, ОРМ, аннотаций, DI, шаблонизаторов Java, спринга, и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 17:34 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадязабыл никпропущено... А вот когда знаешь... то орм отличный помощник это , если и помошник, то очень недоразвитый... не может он знать все тонкости и специфики баз. поэтому использует только верхушки. а в знании конкретно каждой реализации баз (mysql, mssql и пр.) и есть мастерство использования данных. Ну скажи честно, что ты просто не пробовал в этих технологиях разобраться. Я у тебя спрашивал уже - вот скажи сколько у тебя людей в команде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 17:45 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
забыл никвадяпропущено... это , если и помошник, то очень недоразвитый... не может он знать все тонкости и специфики баз. поэтому использует только верхушки. а в знании конкретно каждой реализации баз (mysql, mssql и пр.) и есть мастерство использования данных. Ну скажи честно, что ты просто не пробовал в этих технологиях разобраться. Я у тебя спрашивал уже - вот скажи сколько у тебя людей в команде? честно - не пробовал я одиночка я повторю- те проблемы о которых тут пишут - я о них вообще не знаю, потому как они просто не возникают. к примеру есть несколько строк базе их надо преобразовать к виду зач1,знач2,знач2 сколько строк в хибере надо для этого? и обратно - есть поле в базе вида зач1,знач2,знач2 надо выбрать из другой таблицы записи с id равными зач1,знач2,знач2, но построчно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 19:31 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
вадя, язык определяет сознание. Если ты кодишь forms-app. И у тебя 99% запросов типа взять состояние формы и положить ее в БД или наоборот вычитать или сделать lookup то здесь работать удобнее с ORM-представлением объекта. И здесь хибер - не единственный. Как говорил Шипилев - каждая крупно-корпорация считает своим долгом запилить свой ОРМ. Поэтому количество ОРМ-ов науке не известно. Лично я сам не любитель Хибера и ОРМ-ов но признаю что существуют задачи где он удобен. Он - как приспособление а не идеология. И разработчики его приспосабливают когда есть потребность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 19:38 |
|
||
|
Hibernate запросы
|
|||
|---|---|---|---|
|
#18+
автор.......Лично я сам не любитель Хибера и ОРМ-ов но признаю что существуют задачи где он удобен. Он - как приспособление а не идеология. И разработчики его приспосабливают когда есть потребность. с этим трудно не согласиться. если прогер идёт на всё с открытыми глазамии и понимает всю кучу лишнего кода, без которого можно обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2016, 19:45 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2124106]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
93ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 439ms |

| 0 / 0 |
