Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java tools & IDE's > Что такое hibernate ? |
Автор: Wowa 14.10.2004, 12:22 |
Что такое hibernate (из соседней темы ![]() |
Автор: Шмель 14.10.2004, 12:53 |
![]() Hibernate - Object-Relational XML-based persistence Позволяет проецировать классы с помощью XML на таблицы базы данных |
Автор: Шмель 14.10.2004, 13:05 | ||||
Пример Это map-xml
А это то, с чем будем работать
забыл добавить. @hibernate - тэг http://xdoclet.org, после обработки которым получим map-xml по одному на каждый нужный класс |
Автор: 3,14 14.10.2004, 14:09 |
Я например под спроектированную в PowerDesigner-е БД автоматически получаю готовую библиотеку для работы с ней, делаю экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать. |
Автор: ElectricalStorm 15.10.2004, 10:43 |
Прикольная вещь. ;) |
Автор: Wanderer2019 24.12.2004, 13:35 |
модет и прикольная. но ниче не понял. в каких случаях лучше "hebirnate", а в каких по запросам строить? |
Автор: Nobody 26.12.2004, 17:34 |
Насколько я понял, hibernate - альтернатива EJB? |
Автор: Sleepy_PIP 26.12.2004, 20:11 | ||
в приведенном - не увидел ни одного запроса. А потом - исскуство писаниниы SQL еще никто не отменял. И я не уверен что хибернейт знает о структуре БД что-то больше, чем разработчик ... "экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать" - вот это и не понятно. совсем. часто для получения удобоворимого результата по времени и данным приходится варировать как источники данных, так вплодь до синтаксиса самого запроса. Если конечно все на уровне select t1.*, t2.* from table1 t1, table2 t2 where t1.id=t2.id - то тогда я понимаю ... а если копать гораздо глубже? где выясняется что ф. лучше селекта, или серект через пару-тройку таблиц лучше прямого селекта из одной таблицы? не. не понимаю, право слово ... Как это тогда получается? |
Автор: Се ля ви 18.1.2005, 16:44 |
Суть hibernate в том, что она превращает реляционную БД в объектно-ориентированную. Это полная виртуализация хранения объектов - если hibernate нормально установлен и сконфигурирован, то внутри программы вы просто даёте ему объект в каком-то месте программы - и забываете о нём. Когда вам понадобилась ссылка на этот объект снова - просто запрашиваете объект у hibernate - и он вам его даёт. hibernate сам решает - класть его в БД или хранить в памяти - на основании частых или не очень вопросов к нему. Пользователя hibernate это ни коем образом не волнует - он работает только с API Hibernate. Пользователя даже вообще не должно волновать - в БД его объект, просто на винчестере сериализован, в памяти или где-то ещё - это полностью забота hibernate и определяется тем, кто его конфигурит и админит. Hibernate может и сам таблицы под любой передаваемый ему объект делать - при правильной настройке. Вот уже настройка hibernate - дело сложное... SQL и Hibernate - это как С++ и Java - просто более высокий уровень взаимодействия ООП-Приложения с Базой Данных. Вопрос об оптимальности самого Hibernate - такой же больной, как и вопрос об оптимальности JVM. Но сам факт того, что программист не думает о том, как его объекты хранятся - сильно облегчает работу и позволяет лучше сосредоточится на бизнес-логике. :-) |
Автор: jer1 25.4.2005, 09:52 | ||
как Hibernate соотносится с ejb - это другой подход? спасибо |
Автор: iskan 25.4.2005, 10:13 |
Нет, это не другой подход. CMP ( Container Managed Persistence ) во многих контейнерах реализуется при помощи той или иной ORM а сдругой стороны вы тоже можете использовать ORM для реализации BMP (Bean Managed Persistence ) |
Автор: Zandr 26.4.2005, 06:38 | ||||||||
Кошмар. Советую внимательно посмотреть в сторону XDoclet. Добавил в JavaDoc (вы ведь документируете ваш код? ) пару атрибутов, и задание в Ant - и все, все маппинги будут создаваться автоматом.
Hibernate - это механизм сохранения состояния объектов. EJB - это наворочнный RMI (удаленный вызов процедур) с кучей наворотов (транзакции, авторизация, кластеризация, .....). Ребята из hibernate предлагают вместо CMP юзать BMP с hibernate движком.
хибернейт может знать больше разработчика о том как лучше составить запрос (могу ошибаться)
А никто и не запрещал самому писать запросы (на HQL или нативном SQL), если выясняется, что хибернейтовская реализация - узкое место. Вопрос в том - насколько часто возникают такие вещи и насколько разработчик может улучшить результат таким образом. |
Автор: 3,14 26.4.2005, 11:45 | ||||||
Обязательно посмотрю
ИМХО он просто избавляет от рутинной низкоуровневой работы, всё же в ООП легче работать с обьектной БД
Я всю SQL-ную часть стараюсь выкидывать на сторону БД при помощи view, думаю что не совсем правильно когда код содержит SQL запросы, от этого читаемость кода заметно понижается. |
Автор: Zandr 27.4.2005, 06:06 |
Во многом согласен, конечно, но хранимые процедуры и вьюшки поддерживаются не всеми БД. Если нужна портируемость, то звиняйте. |
Автор: Sleepy_PIP 6.6.2005, 13:10 |
Граждане! извините зща глупый вопрос: А где-б нарыть как можно больше примеров по Hibernate? в гугле смотрел - толком ничего не нашел ... Спаибо! |
Автор: Се ля ви 6.6.2005, 14:05 | ||
А на http://hibernate.ru не пробовал искать? ![]() |
Автор: Sleepy_PIP 6.6.2005, 14:12 | ||||
Вах! СПАСИБО!!! ![]() |
Автор: Се ля ви 6.6.2005, 14:56 | ||
Пожалуйста ![]() P.S. Сам по нему хибернейт изучал в своё время. |
Автор: LSD 6.6.2005, 20:02 | ||
А что за XSLT шаблон? |
Автор: VDe 6.6.2005, 21:27 |
это именнованый шаблон как функция. Именнованные шаблоны можно использовать в качестве функций, которые принимают на вход несколько параметров и возвращают некоторое вычисленное значение. |
Автор: 3,14 7.6.2005, 08:57 |
Думаю что LSD имеет ввиду готовый пример, как восстановлю винч, так закину его сюда |
Автор: LSD 7.6.2005, 21:08 | ||
Именно ![]() Жду |
Автор: Sleepy_PIP 8.6.2005, 11:29 |
не понял по поводу генераторов ... общий вид: <id name="id" type="long" column="uid" unsaved-value="0"> <generator class="net.sf.hibernate.id.TableHiLoGenerator"> <param name="table">uid_table</param> <param name="column">next_hi_value_column</param> </generator> </id> где и как мне сказать что я хочу использовать секвернсор (оракловый), имеющий конкретное имя, а? причем имя - со схемой ... Спасибо! |
Автор: Шмель 8.6.2005, 11:47 | ||
наверное, что нибудь типа такого:
тут написано - http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id-sequences |
Автор: Sleepy_PIP 8.6.2005, 11:53 | ||||
Добавлено @ 11:55
ссылка кажет на http://file///opt/java/hibernate/doc/reference/en/html_single/index.html и не открывается. но доки у меня есть. Спасибо за наставление на правильный путь! |
Автор: Шмель 8.6.2005, 11:56 |
прошу прощения за линк ![]() http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id-sequences |
Автор: Sleepy_PIP 22.6.2005, 15:33 | ||||||||
блиин. выручай! никак не могу заставить ant с подкл. XDoclet-ом генерить маппинг по файлу класса ... вот что в build.xml: .... <target name="xdoclet-hibernate" depends="clear-mappings,prepateforhibernate"> <description> Generate Hibernate mappings using XDoclet </description> <taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask" classpathref="hibernate.generation.classpath"/> <!-- @see http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/hibernate/HibernateDocletTask.html --> <hibernatedoclet destDir="${project.hibernate.mapping.dir}" mergeDir="${project.hibernate.templates.dir}" excludedtags="@version,@author,@param,@return,@throws" force="true" verbose="true"> <fileset dir="${src}/com/pip" includes="**/*.java"> <selector> <contains text="@hibernate"/> </selector> </fileset> <!-- Generate all the mappings --> <hibernate version="3.0"> </hibernate> </hibernatedoclet> </target> вот что в классе:
вот что при запуске Ant-а C:\pipw\mmolo\java>ant xdoclet-hibernate =========== Buildfile: build.xml clear-mappings: prepateforhibernate: xdoclet-hibernate: [hibernatedoclet] (XDocletMain.start 47 ) Running <hibernate/ > BUILD SUCCESSFUL Total time: 3 seconds C:\pipw\mmolo\java> =========== и _все_ в dest каталоге - пусто. ф. находит, т.к. если сказать <selector> <contains text="public"/> </selector> имеем: ================== Buildfile: build.xml clear-mappings: prepateforhibernate: xdoclet-hibernate: [hibernatedoclet] (XDocletMain.start 47 ) Running <hibernate/ > [hibernatedoclet] INFO: Some classes refer to other classes that were not fou nd among the sources or on the classpath. [hibernatedoclet] (Perhaps the referred class doesn't exist? Hasn't bee n generated yet?) [hibernatedoclet] The referring classes do not import any fully qualifi ed classes matching these classes. [hibernatedoclet] However, since no packages are imported, xjavadoc has assumed that the referred classes [hibernatedoclet] belong to the same package as the referring class. Th e classes are: [hibernatedoclet] C:\pipw\mmolotok\java\src\com\pip\dbobjects\PoweredUser.java - -> User qualified to com.pip.dbobjects.User [hibernatedoclet] C:\pipw\mmolotok\java\src\com\pip\dbobjects\PoweredUser.java - -> User qualified to com.pip.dbobjects.User BUILD SUCCESSFUL Total time: 3 seconds ===================== что я не правильно делаю?? Спасибо! |
Автор: Sleepy_PIP 22.6.2005, 17:38 |
Извините. сам разобрался ... |
Автор: AntonSaburov 22.6.2005, 17:43 |
А поделится ? ![]() |
Автор: Sleepy_PIP 22.6.2005, 19:05 | ||||||||
да, да. извините! Привожу _рабочий_ пример build.xml:
звпуск - ant xdoclet-hibernate ну естественно надо обратить внимание на пути. сам проект лежит так: /java/... т.е. src - это .../java/src и пример простейшего класса:
обратите внимание на расположение и обязательность /** * @hibernate.class * table = "USERS" */ плюс к этому - все /** * @hibernate.id * generator-class="native" * column="IDU" */ и подобные, относящиеся к каждой проперти надо ставить непоср. перед get-терами. и вот результат:
более подробно про XDoclet'овские теги для Хибернейта читать тут: http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html PS: важное замечание! - синклюдить данный build.xml в головной build.xml директивой <include file=... /> мне не удалось. ругается на тэг <target - даже если он пустой! так что рекомендую данный пример просто добавлять в коней своих build.xml ... PPS: кстати у Xdoclet-оского тега @hibernate.mapping разумеется не обнаружилость свойства package - врезультате, _везде_ где есть слово class= мы вынуждены писать полное имя класса. При этом замечу - сам hibernate - отлично понимает и package и сокращенное имя класса. но увы и ах! - один не разумеет что творит другой, и все ложится на плечи разработчика ![]() |
Автор: Egypt 25.7.2005, 14:15 |
![]() ![]() |
Автор: batigoal 25.7.2005, 14:25 |
Например, тут было: http://forum.vingrad.ru/index.php?showtopic=57659 |
Автор: pebehb 19.1.2006, 19:25 |
У меня Eclipse+Hibernate Может кто сталкивался с необходимостью просмотреть информацию в БД через Hibernate? |
Автор: pebehb 20.1.2006, 17:18 | ||||
Походу hibernate.ru больше не работает, может инфорацию кто перенёс на другой сайт ? |
Автор: pebehb 23.1.2006, 16:26 |
Большое спасибо!!! ![]() |
Автор: Се ля ви 24.1.2006, 18:38 |
И от меня Thanx. И всё-таки интересно - что с ним сталось?.. Неужели просто отрубили - и всё? Вообще Hibernate вроде бы JBoss перекупил (если изначально не владел) - но у них на сайте весит предложение помогать переводить доку на русский - а что, не могли проспонсировать этот сайт, что бы хотя бы просто висел? Или нынешняя версия так сильно отличается от 2.1, что эта документация вообще не годится и надо всё переводить заново?.. |
Автор: LSD 24.1.2006, 22:07 |
Да пожалуйста, это мы так скачивали, чтоб на досуге поизучать. Но документация по Hibenate достаточно скупая, а руская тем более, только как QuickStart годится. |