|
|
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
<id name="id" type="integer" unsaved-value="null" > <generator class="identity"/> </id> Но в таком случае мне придется добавлять столбец id в таблицу. Если я пишу так: <id type="integer" unsaved-value="null" > <generator class="identity"/> </id> То добавлять столбец в таблицу не приходится, но при любой выборке типа "from hiber.CatImp1 " возникает ошибка SQLException catimp1_id column not found... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:01 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
может сначало решите проблему с вашей базой в которой нет PK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:09 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Я интересовался у людей плотно работающих с базами, мне сказали что пк желателен, но не обязателен. Я работаю с их базой. Что мне делать в случае hibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:28 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Вот еще вопрос.. В SQL я могу связать две любые таблицы про полю одного типа... select * from table1 t1 inner join table2 t2 on t1.name=t2.title Как проделать это с помощью HQL запроса? Непонятно. Подскажите hibernate новичку люди добрые. Хибернейтный inner join делает немного другое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:39 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Alexey TurnЯ интересовался у людей плотно работающих с базами, мне сказали что пк желателен, но не обязателен. Что????????? Alexey TurnЧто мне делать в случае hibernate. Вернуться к старому доброму JDBC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:53 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Alexey Turn Т.е. ПК нет вообще или он есть но без constraint'а или индекса? Вы как запросы к такой БД пишите? Пример можно? Я интересовался у людей, плотно работающих с базами.. Обычно таких людей предлагают отстреливать, чтобы не портили генофонд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:56 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
funikovyuri Alexey Turn Т.е. ПК нет вообще или он есть но без constraint'а или индекса? Вы как запросы к такой БД пишите? Пример можно? Я интересовался у людей, плотно работающих с базами.. Обычно таких людей предлагают отстреливать, чтобы не портили генофонд... люди всякие нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:58 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
не спорю. я думаю Алексей их как-то неправильно понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 14:06 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
funikovyuri Alexey Turn Т.е. ПК нет вообще или он есть но без constraint'а или индекса? Вы как запросы к такой БД пишите? Пример можно? Я интересовался у людей, плотно работающих с базами.. Обычно таких людей предлагают отстреливать, чтобы не портили генофонд... Слишком категорично... Отсутствие pk - нормальная ситуация. С этим можно и нужно жить (ц) не знаю кто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 14:07 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
TimmОтсутствие pk - нормальная ситуация. С этим можно и нужно жить (ц) не знаю кто Можно уточнить, "нормальная" - в смысле "широко распространненная в нашем несовершеном мире криворуких головотяпов - разработчиков" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 14:27 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Timm да не вопрос! это у меня настроение наверное сегодня такое ;) PS> я думаю все-таки кто-то кого не понял и пока Алексей ясно картину не нарисует обсуждать по-сути нечего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 14:28 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
XM TimmОтсутствие pk - нормальная ситуация. С этим можно и нужно жить (ц) не знаю кто Можно уточнить, "нормальная" - в смысле "широко распространненная в нашем несовершеном мире криворуких головотяпов - разработчиков" ? Я этого не говорил :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:00 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Началось, как я уже говорил с хибернэйта. Головотяпом- разработчиком в данном случае выступаю я. В моем веб- приложении есть 2 таблицы (На самом деле их больше но интересны эти.) Моя mysql база синхронизируется с базой database developerov, т.е происходит закачка справочников от них ко мне. Таблица 1 : название: price поле price_id int pk поле id_nprice int pk поле price_title varchar Первые два поля композитный ключ(точно не знаю как это называется) но по ним однозначно определяется строка таблицы. В своей базе я не стал обзывать эти поля primary key, потому, что предполагаю что таблица из которой я импортирую данные зараннее корректна. Эту проблему я предполагаю решить следующим образом: навесить таки primary keys на поля. Замапить composite id в hibernate. Далее... Есть вторая таблица: имя: links поля: price_id int pk field1 int pk field2 int pk field3 int pk id_nprice int Все поля в этой таблице кроме id_nprice составляют пк. Вопрос как с помощью хибернэйт реализовать sql выборку: select * from price p inner join links l on (p.price_id=l.price_id AND p.id_nprice=l.id_nprice); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:01 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Пока забил на все и написал Connection conn= session.connection().. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:03 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Поправьте, если я ошибаюсь, но Hibernate, как и прочие ORM, всегда требует наличия ID (простых или composite). По теме http://www.hibernate.org/hib_docs/reference/en/html/components.html ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:16 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
хм по этой ссылке рассказывается про Component Mapping. Мне хотелось бы узнать как замапить композитный пк и что потом с ним можно делать... именно об этом я щас и читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:30 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Сейчас оказывается что использование композитных ключей вобще не рекомендовано создателями hibernate и якобы лучше использовать суррогатные ключи, т.е добавлять суррогатный.. лишний столбец ключа в таблицу. При использовании композитных ключей приходиться возиться с equals() и hashCode() ами, что немного напрягает и сложно для понимания. Если придется ставить суррогатный ключ, то получается что на него надо в любом случае ставить счетчик- auto_increment. Иначе при закачке данных в таблицу не через хибернэйт никакой генерации суррогатных ключей не будет. Последнее время хибернэйт нравится мне все меньше и меньше... может те кому хорошо с хибернэйт поделятся секретами счастья? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 09:40 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Alexey Turn При использовании композитных ключей приходиться возиться с equals() и hashCode() ами, что немного напрягает и сложно для понимания. Спешу огорчить - с ними нужно будет "возиться" в любом случае... Так что если это "сложно для понимания" то мой совет дождаться момента, когда будет не сложно. Hibernate чрезвычайно полезная и мощная вещь, но он требует больших базовых знаний и по ООП и по РСУБД. Его очень сложно осилить не имя большого опыта в этих областях за плечами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 11:12 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Просто возникает законный вопрос. Надо ли оно мне.. ради обычного inner join мапить две таблицы, создавать композитные ключи, переопределять методы equals и hashCode() и писать для двух таблиц 6 файлов.. два интерфейса два класса два xml маппинга и два теста.. итого 8 .. Что мне это даст, какие преимущества это противопоставит обычному jdbc, для которого здесь нужен будет всего один exequteQuery(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 15:10 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
При такой постановке вопроса - конечно ничего не даст. А что вы от hibernate ждали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 15:36 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Привет Всем, я, как вижу, нашего полку прибыло, еще один hiberneto-ненависник вырисовывается... Привет коллеге. На самом деле все просто. Я, да и Алексей наверно, привыкли _мыслить_ понятиями базы, а hibernate предпологает _мыслить_ понятиями ООП. А сии взгляды очень расхожи. А главное, мыслить и так и сяк одновременно невозможно (в рамках одного проекта). Имея кой-какой опыт работы с базой уже привыкаешь к кой-каким реальностям (отсутсвие ПК например). Оч.часто приходиться работать воще не со своей базой, а с чужой, спроектированной, может не лучшим образом. Ну а тут еще hibernate начинает палки в колеса ставить своими _принцыпами_. Я ничего не имею супротив ООП. И hibernate в частности. Вот тольки стоит отдавать себе отчет в том, что вся его _мощь_ может быть использована только при наличии неких определенных (близких к идеальным) условиях. В остальных случаях можно получить много головной боли. В частности, кады начнешь мешать JDBC с hibernate. Сие можно сделать, но осторожно. По крайней мере понимая, как hibernate работает с базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 17:54 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
andrushok вилами по воде... в общем полностью не согласен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 18:20 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Так уж и со ВСЕМ? А можно поподробнее? Таки hibernate еще не покинул моих планов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 21:58 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
andrushokТак уж и со ВСЕМ? А можно поподробнее? Таки hibernate еще не покинул моих планов ... Имхо, книжка "hibernate in action" ответит быстрее и на большее число вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2005, 20:24 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Ну шо за такой народ ленивый пошел. Да читал я Ваши книжечки. И не только. Терзал сей hibernate по мере сил и возможностей. Дык Вы хоть чой-то реальное на нем пишите? Я честно признаюсь - не писал еще. Только примерчики всяки... Поэтому и вопросов, больше чем ответов. Ну дык, коли лень поднять зад, давайте небольшой опросец забацаем. Я вопросики просты задам, а коме не совсем влом, пусть тольки да-нет ответит (ну ежели совсем не влом, комментарии тольки приветсвуются ...). Вы кстати, тоже вопросики добавлять могете (опять таки если не влом...). Я уж отвечу, не поленюся. Итак, поехали 1) Hibernate ускоряет разработку простых и средних приложений 2) Hibernate ускоряет разработку сложных приложений 3) Не рекомендуется мешать hibernate и JDBC 4) Hibernate заменяет понятие RDB на что-то типа "Persistent objetcs in DB" 5) Hibernate не рекомендует использовать native SQL 6) Hibernate работает медленнее, чем если реализовывать через JDBC 7) Сей топик породил еще одного (как миниум) hibernato-ненависника 8) ООП - панацея на все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2005, 05:26 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Ну и мои ответы, конечно 1) Hibernate ускоряет разработку простых и средних приложений - Да 2) Hibernate ускоряет разработку сложных приложений - Нет 3) Не рекомендуется мешать hibernate и JDBC - Да 4) Hibernate заменяет понятие RDB на что-то типа "Persistent objetcs in DB" - Да 5) Hibernate не рекомендует использовать native SQL - Да 6) Hibernate работает медленнее, чем если реализовывать через JDBC - Да 7) Сей топик породил еще одного (как миниум) hibernato-ненависника - Да 8) ООП - панацея на все - Нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2005, 05:28 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Просто у меня появилось время и мне хочется прощупать технологию hibernate. Во время этого прощупывания соответственно появляются вопросы. 1. Сначала была база потом приложение. Стоит ли в этом случае городить огород реляционного мапинга. Понятно, что если супердизайнеры объектов спроектировали uml картинки приложения. Потом забабахали классы. Потом сгенерили таблицы в базе... естественно у них не возникнет особых несостыковок. А вот если заказчик дает тебе базу и говорит: менять структуру низя. Приходится изъ№"№нуться чтоб натянуть на нее hibernate. Или может hiberprofy натягивают hibernate на любую базу? 2. Действительно ли рекомендуется не мешать hibernate и jdbc? Если да то почему? (Для меня это очень важно, потомучто только так я могу гарантировать, что все будет работать независимо от моих граблей с хибернэйтом - вызывать session.getConnection() там где нельзя по другому и пользоваться старым добрым дждбс) Единственное что мне пока нравится - это то, что я получаю в результате выборки объекты(Не нада руками мапить резалтсет в нужные объекты). Буду благодарен за показанные преимущества hibernate. Да и не плохо было бы исключить ответы о преимуществах хибернэйт типа: "А... О... хибернайт - выбор профессионалов... подрастешь поймешь(непременно растопырив пальцы) " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2005, 15:13 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
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) ООП - панацея на все - Нет Не понятно зачем такой вопрос ставился. Есть области, где использование ООП даёт преимущества и есть области, где это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2005, 18:52 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Не_Без_Нас_Грешных ... Imho, - в простых приложениях использование hibernate замедлит разработку, проще грамотно спроектировать таблички, процедурки и т.д. - в средних - в зависимости от опыта работы с hibernate и общих требований к приложению (если не знать достаточно хорошо h* и торопиться, то получится заведомо хуже, чем используя голый jdbc). - в сложных - без использования hibernate или аналогичного средства просто никуда не денешься. На Ваше Imho я имею свое. Тольки одно уточнение. Возможность спроектировать базу и написать поверх нее что-то достаточно _невилика_ в наше время. Скорее всего база уже рождена кем-то до Вас и 1) Она сама спректированна не лучшим образом (программисты, твою мать) 2) Она совершенно не отвечает тем пожеланиям, которые Вы имеете. Таки, если Вы обитаете в _академическом_ мире, то оч.удобно сопоставлять нужные пробирки, а реалный мир предпологает разгребание дерьма в производсвенных масштабах. К большому сожалению с реальным миром я имеел дело куды чаще (может, Вам и везло ...) Итого - в простых приложениях использование hibernate ускорит разработку, проще грамотно _ВСЕ_ спроектировать и _РЕАЛИЗОВАТЬ_. - в средних - в зависимости от опыта работы с hibernate и общих требований к приложению (если не знать достаточно хорошо _ЧТО-ТО_ и торопиться, то получится заведомо хуже, чем используя _ТО_ЧТО_ЗНАЕШЬ_, Hibernate в частности, так как не стоит предпологать, что это умно использовать hibernate, если с ним не знаком). - в сложных - без использования оптимизации SQL и изменения схемы базы (например, денормализация) просто никуда не денешься. Что сущейственно осложняет работу с такими промежуточными layers как hibernate. Вот така моя интерпритация. А в остальном, прекрасная маркиза, я с Вами полностью согласен, да и Вы со мной, что совсем не странно, однако. 2 Алексей Поворотный Я уже тут кое-где писал о сюрпризах hibernate, типа что save() совсем не означает, что объект записывается в базу, а load(), что он из базы прочитан. Hibernate кеширует запросы и выполняет их, только когда считает нужным. Так что надо либо довериться ему в этом (можно, его толковые ребята писали), либо ... сами знаете. Вот и не надо мешать JDBC, а то много грабель будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 07:17 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
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-моделирование РБД? Это в общем не верно. Почему? Это другой вопрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 11:21 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Фуников Юрий Я уже тут кое-где писал о сюрпризах 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. Но написать достаточно хорошо работающее приложение быстро - это вопрос. На который я пока для себя точноного ответа не получил, однако ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 18:30 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Вы читали? Я не знаю... Можно былоб пару сточек хотя бы чиркнуть ... Черкну сейчас авторОни как раз решили наоборот и постепенно развивают продукт в этом направлении Это верная. Первая тоже верная, но я имел в виду что в том виде в котором поддержка 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 19:33 |
|
||
|
Что делать если у меня нет первичного ключа в базе , а hibernate требует его явно писать.
|
|||
|---|---|---|---|
|
#18+
Ну вот, дык обо всем договориться можно. Вот тольки с командой беда, манагеры, сволочи, хотять подешевле, так имеем, что имеем ... Но это уже из другой оперы, офф топ, однако. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 20:41 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2152339]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 426ms |

| 0 / 0 |
