powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
8 сообщений из 33, страница 2 из 2
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33078901
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и мои ответы, конечно
1) Hibernate ускоряет разработку простых и средних приложений - Да
2) Hibernate ускоряет разработку сложных приложений - Нет
3) Не рекомендуется мешать hibernate и JDBC - Да
4) Hibernate заменяет понятие RDB на что-то типа "Persistent objetcs in DB" - Да
5) Hibernate не рекомендует использовать native SQL - Да
6) Hibernate работает медленнее, чем если реализовывать через JDBC - Да
7) Сей топик породил еще одного (как миниум) hibernato-ненависника - Да
8) ООП - панацея на все - Нет
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33079013
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто у меня появилось время и мне хочется прощупать технологию hibernate.

Во время этого прощупывания соответственно появляются вопросы.

1. Сначала была база потом приложение. Стоит ли в этом случае городить огород реляционного мапинга.

Понятно, что если супердизайнеры объектов спроектировали uml картинки приложения. Потом забабахали классы. Потом сгенерили таблицы в базе... естественно у них не возникнет особых несостыковок.

А вот если заказчик дает тебе базу и говорит: менять структуру низя. Приходится изъ№"№нуться чтоб натянуть на нее hibernate. Или может hiberprofy натягивают hibernate на любую базу?

2. Действительно ли рекомендуется не мешать hibernate и jdbc? Если да то почему?
(Для меня это очень важно, потомучто только так я могу гарантировать, что все будет работать независимо от моих граблей с хибернэйтом - вызывать session.getConnection() там где нельзя по другому и пользоваться старым добрым дждбс)

Единственное что мне пока нравится - это то, что я получаю в результате выборки объекты(Не нада руками мапить резалтсет в нужные объекты).

Буду благодарен за показанные преимущества hibernate.

Да и не плохо было бы исключить ответы о преимуществах хибернэйт типа:

"А... О... хибернайт - выбор профессионалов... подрастешь поймешь(непременно растопырив пальцы) "
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33079092
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushok
1) Hibernate ускоряет разработку простых и средних приложений - Да
2) Hibernate ускоряет разработку сложных приложений - Нет

В книжечке, о которой я упоминал, приводятся рассуждения о не стыковке парадигм возникающей при связывании реляционных баз данных и оо кода.
Там достаточно много иллюстраций в чём эта не стыковка выражается.
Суть всех этих рассуждений одна: если идти на поводу баз данных - теряются все прелести ооп, если идти на поводу у ооп - теряются все приимущества от использования баз данных.
Там же описаны существующие подходы к решению этой проблемы и
ORM признаётся наиболее зрелым из них.

Так же приводится классификация ORM cистем:

Let’s look at the various ways ORM can be implemented. Mark Fussel
[Fussel 1997], a researcher in the field of ORM, defined the following four levels of
ORM quality.
Pure relational
The whole application, including the user interface, is designed around the relational
model and SQL-based relational operations. This approach, despite its deficiencies
for large systems, can be an excellent solution for simple applications
where a low level of code reuse is tolerable. Direct SQL can be fine-tuned in every
aspect, but the drawbacks, such as lack of portability and maintainability, are significant,
especially in the long run. Applications in this category often make heavy
use of stored procedures, shifting some of the work out of the business layer and
into the database.
Light object mapping
Entities are represented as classes that are mapped manually to the relational
tables. Hand-coded SQL/JDBC is hidden from the business logic using wellknown
design patterns. This approach is extremely widespread and is successful
for applications with a small number of entities, or applications with generic,
metadata-driven data models. Stored procedures might have a place in this kind
of application.
Medium object mapping
The application is designed around an object model. SQL is generated at build
time using a code generation tool, or at runtime by framework code. Associations
between objects are supported by the persistence mechanism, and queries may be
specified using an object-oriented expression language. Objects are cached by the
persistence layer. A great many ORM products and homegrown persistence layers
support at least this level of functionality. It’s well suited to medium-sized applications
with some complex transactions, particularly when portability between
Object/relational mapping 25
different database products is important. These applications usually don’t use
stored procedures.
Full object mapping
Full object mapping supports sophisticated object modeling: composition, inheritance,
polymorphism, and “persistence by reachability.” The persistence layer
implements transparent persistence; persistent classes do not inherit any special
base class or have to implement a special interface. Efficient fetching strategies
(lazy and eager fetching) and caching strategies are implemented transparently to
the application. This level of functionality can hardly be achieved by a homegrown
persistence layer—it’s equivalent to months or years of development time. A number
of commercial and open source Java ORM tools have achieved this level of
quality. This level meets the definition of ORM we’re using in this book. Let’s look
at the problems we expect to be solved by a tool that achieves full object mapping.


hibernate - ORM средство из последней категории.

Выгода от его использования тем выше, чем больше требований к ORM системе предьявляет конкретное приложение.
По умолчанию предполагается, что приложение построено согласно layered architecture и что hibernate будет использован в его persistent layer.

Imho,
- в простых приложениях использование hibernate замедлит разработку, проще грамотно спроектировать таблички, процедурки и т.д.
- в средних - в зависимости от опыта работы с hibernate и общих требований к приложению (если не знать достаточно хорошо h* и торопиться, то получится заведомо хуже, чем используя голый jdbc).
- в сложных - без использования hibernate или аналогичного средства просто никуда не денешься.



3) Не рекомендуется мешать hibernate и JDBC - Да

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


4) Hibernate заменяет понятие RDB на что-то типа "Persistent objetcs in DB" - Да

Я не нахожу смысла в этой фразе.


5) Hibernate не рекомендует использовать native SQL - Да

Так же как не рекомендуется использовать native код в java приложениях.


6) Hibernate работает медленнее, чем если реализовывать через JDBC - Да

В простых приложениях - да, т.к. там достаточно просто
представить все таблички, связи между ними и написать эффективные запросы.
В сложных - нет. Попытки ручного написания sql в этом случае сродни попыткам написания эффективного кода на ассемблере под различные процессоры. Мало того, что это оЧЧень много работы, эта работа может быть проведена в пустую. Правда это теория, на практике я никогда такую работу не делал (оптимизацию sql в сложных аpp).



7) Сей топик породил еще одного (как миниум) hibernato-ненависника - Да

Как мало надо для того, что бы породить какого-нибудь ненавистника :)


8) ООП - панацея на все - Нет

Не понятно зачем такой вопрос ставился.
Есть области, где использование ООП даёт преимущества и есть области, где это не так.
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33079216
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не_Без_Нас_Грешных ...
Imho,
- в простых приложениях использование hibernate замедлит разработку, проще грамотно спроектировать таблички, процедурки и т.д.
- в средних - в зависимости от опыта работы с hibernate и общих требований к приложению (если не знать достаточно хорошо h* и торопиться, то получится заведомо хуже, чем используя голый jdbc).
- в сложных - без использования hibernate или аналогичного средства просто никуда не денешься.


На Ваше Imho я имею свое. Тольки одно уточнение. Возможность спроектировать базу и написать поверх нее что-то достаточно _невилика_ в наше время. Скорее всего база уже рождена кем-то до Вас и
1) Она сама спректированна не лучшим образом (программисты, твою мать)
2) Она совершенно не отвечает тем пожеланиям, которые Вы имеете.
Таки, если Вы обитаете в _академическом_ мире, то оч.удобно сопоставлять нужные пробирки, а реалный мир предпологает разгребание дерьма в производсвенных масштабах. К большому сожалению с реальным миром я имеел дело куды чаще (может, Вам и везло ...)

Итого
- в простых приложениях использование hibernate ускорит разработку, проще грамотно _ВСЕ_ спроектировать и _РЕАЛИЗОВАТЬ_.
- в средних - в зависимости от опыта работы с hibernate и общих требований к приложению (если не знать достаточно хорошо _ЧТО-ТО_ и торопиться, то получится заведомо хуже, чем используя _ТО_ЧТО_ЗНАЕШЬ_, Hibernate в частности, так как не стоит предпологать, что это умно использовать hibernate, если с ним не знаком).
- в сложных - без использования оптимизации SQL и изменения схемы базы (например, денормализация) просто никуда не денешься. Что сущейственно осложняет работу с такими промежуточными layers как hibernate.

Вот така моя интерпритация. А в остальном, прекрасная маркиза, я с Вами полностью согласен, да и Вы со мной, что совсем не странно, однако.

2 Алексей Поворотный
Я уже тут кое-где писал о сюрпризах hibernate, типа что save() совсем не означает, что объект записывается в базу, а load(), что он из базы прочитан. Hibernate кеширует запросы и выполняет их, только когда считает нужным. Так что надо либо довериться ему в этом (можно, его толковые ребята писали), либо ... сами знаете. Вот и не надо мешать JDBC, а то много грабель будет.
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33079565
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushok

Я уже тут кое-где писал о сюрпризах hibernate, типа что save() совсем не означает, что объект записывается в базу, а load(), что он из базы прочитан.
А вы, батенька, провокатор. Как там с моим примером дела, в котором save() все записывал, а load() загружал?

1) Hibernate ускоряет разработку простых и средних приложений
2) Hibernate ускоряет разработку сложных приложений


Не совсем верно, на мой взгляд, поставлен вопрос. ORM ускорит разработку любых приложений, но только если их будет вести достаточно грамотная команда разработчиков. Иначе orm не спасет ни малый, ни крупный проекты.

3) Не рекомендуется мешать hibernate и JDBC
Не верно. Я, например, мешаю и, так как это все так и остается на уровне реализации моих DAO - то я никак не теряю в совместимости.

4) Hibernate заменяет понятие RDB на что-то типа "Persistent objetcs in DB"
Не верно. РБД - это РБД никто не предлагает заменять их ORM. Это как двигатель
рулем.
5) Hibernate не рекомендует использовать native SQL
Тоже неверно. Т.е. вы не совсем верно понимаете рекомендации hibernate team. Они не рекомендуют его использование для реализации object querying'а для самого hibernate. т.е. если хотите использовать те же хранимые процедуры я бы лучше стал мешать hibernate и jdbc.
6) Hibernate работает медленнее, чем если реализовывать через JDBC
Лучше документацию по Hibernate прочесть - там об этом неплохо написано.

7) Сей топик породил еще одного (как миниум) hibernato - ненавистника
По-моему сей топик не тянет даже на средний уровень. так что кого и когда он породил мне не ясно.
8) ООП - панацея на все

Сложный вопрос. Вы, я так понимаю, противопоставляете ООП и ER-моделирование РБД? Это в общем не верно. Почему? Это другой вопрос...
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33080771
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фуников Юрий
Я уже тут кое-где писал о сюрпризах hibernate, типа что save() совсем не означает, что объект записывается в базу, а load(), что он из базы прочитан.
А вы, батенька, провокатор. Как там с моим примером дела, в котором save() все записывал, а load() загружал?

А вы батенька, американский шпиен, однако! Таки не колитесь. С примером усе впорядке - я помоему описал мою работу с ним. Вы читали? Я не знаю... Можно былоб пару сточек хотя бы чиркнуть ... Там кой-каки грабли, кстати описаны (я могу, конечно опять ошибаться, человек, однако). Ну дык к нашим баранам

1) save() ничего не кладет в базу, а кеширует SQL запросы. Они выполняются при вызове commit()
2) load() ничего не грузит из базы, к базе идет запрос тольки при первом вызове какого-нить get...()

Эти утверждения верны или нет? Если верны - ТРЕБУЮ ИЗВИНЕНИЙ ЗА ПРОВОКАТОРА! (шутка =)). Если нет - зарание сам извиняюсь - мол, провокатор таки, бес попутал (тоже шутка =)).

Ну а что грамотная команда разработку (любую!) сделает лучше, я согласен. Да и кажный согласиться. А вот средненька команда (опять реалии жисти, однако) дров может с hibernate наломать, что потом и не расхлебаешь. Да еще при условии, что база дана _как_есть_. Так что дорогой Вы наш, учитывая все наши оговорки, мы говорим об одном и том-же, тольки в силу нашей личной специфики кажный выпячивает то, что ему выгодно и скрывает, что не выгодно. Нормальное поведение.


Ну и про RDB и OOP. Опять таки вопросики ...
1) Если я использую JDBC - я работаю с понятиями RDB (record, field, recordset ...)
2) Если я использую Hibernate - я работаю с понятиями OOP (object, hierarchy, deriving ...)
3) Eсли я пользую и то и другое - я вынужден мешать эти понятия.

Я думаю здесь все согласны, что ответ "ДА".
А вот хорошо ли мешать то и другое, вопрос более сложный и мы опять вернулись в область оговорок - квалификация команды. При отличной команде это фиолетово - толковые ребята во всем разберуться. При средней будет много головной боли.

Я уже говорил - меня щас волнует _практицкое_ использование сего продукта, поэтому я и придираюсь к нему. А _тетеретицки_ все очень классно, что в описаниях (которые Вы мне советуете постоянно почитать) показано. Я уже и эту книжку "Hibernate in Action" прикупил, написанную кстати авторами сего продукта. Там тоже много лестных слов они о себе написали.

Основеная проблема (для меня, ессесвенно) это то что ребята из hibernate мыслят совсем иначе, чем я. И если они считают, что hibernate генерить достаточно оптимальй коде - я с ними не согласен. Оптимизировать базу на уровне SQL запросов (хранимых процедур в частности) можно лучше. Imho. Но написать достаточно хорошо работающее приложение быстро - это вопрос. На который я пока для себя точноного ответа не получил, однако ...
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33080901
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы читали? Я не знаю... Можно былоб пару сточек хотя бы чиркнуть ... Черкну сейчас
авторОни как раз решили наоборот и постепенно развивают продукт в этом направлении

Это верная. Первая тоже верная, но я имел в виду что в том виде в котором поддержка SP реализована сейчас их использование для CRUD-операций не целесообразно.

...
Integer id = Integer( 2);
Cat cc = session.load( Cat.class, id);
...
// где-то выполнили SQL напрямую и удалили из базы кота с ID = 2
...
cc.setName( cc.getName() + '!'); // Таки здесь получили ошибку, так как
// кот cc начал грузиться из базы тольки на cc.getName();
session.save( cc);

Да произойдет ошибка и транзакция откатится. Это нормальное поведение. Тут можно много интересного написать про pessimistic и optimistic locking strategy, но конкретно для этого примера прежде всего стоит сказать что он концептуально не верен. Т.е. налицо ошибка в алгоритме. А так из-за того что все действия проходят в одной транзакции мешать код (sql и hql) можно и иногда нужно.

Я имел ввиду не использовать insert/update/delete напрямую (сие работает!) а SP вместо них.
И я тоже имел в виду именно это :)

практически в кажный SQL может быть необходимость что-то добавить.
Или я чего-то не понимаю или ... Т.е. хочется пример задачи где в каждый запрос с клиента нужно чего-то добавлять! (ну во view это все заверните ?)

Да и кажный согласиться. А вот средненька команда (опять реалии жисти, однако) дров может с hibernate наломать, что потом и не расхлебаешь.
Согласен. Но Imho такую команду лучше к проектам не подпускать. Пусть не все, но ведущие позиции должны занимать знающие люди. Они вместе с code review должны будут выявлять неверные подходы у менее опытных товарищей. Но это уже больше не ко мне а к тем кто занят управлением проектами.

Я думаю здесь все согласны, что ответ "ДА".
А вот хорошо ли мешать то и другое, вопрос более сложный и мы опять вернулись в область оговорок - квалификация команды.
Тоже согласен. Но это “мешание” будет изолированно в DAL'е и без него пока так или иначе никуда. Все равно с простыми recordset'ами ничего серьезного не сделаешь.

1) save() ничего не кладет в базу, а кеширует SQL запросы. Они выполняются при вызове commit()
2) load() ничего не грузит из базы, к базе идет запрос только при первом вызове какого-нить get...()
Первое верно, второе зависит от вида locking strategy
...
Рейтинг: 0 / 0
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
    #33080962
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, дык обо всем договориться можно.
Вот тольки с командой беда, манагеры, сволочи, хотять подешевле, так имеем, что имеем ... Но это уже из другой оперы, офф топ, однако.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]