powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и Oracle
20 сообщений из 20, страница 1 из 1
Hibernate и Oracle
    #33061085
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не хрена Hibernate на Oracle не заточен. Тут немного поизучал, как через Named Query вызывать Stored Procedure. Для начала, это все же функция, а не процедура, так как оракловые процедуры ничего не возвращають. Во всех умных статейках (типа этой , но я много иде встречал), говориться, что мол возвращайте REF CURSOR и усе будет ок. Это вранье (наглое!). Правильно для JDBC, но не для Hibernate. Судя по статейкам процедуру (функцию, таки) рекомендуется вызывать так:
Код: plaintext
{ ? = call myfunc() }
И що делает hibernate - он ее преобразуеть в типа
Код: plaintext
select * from ({ ? = call myfunc() }) where rownum <= ?
Дык сия конструкцыя в Oracle то не работает. Совсем! В FROM можно поставить тольки table, view или select на table nested item. Соответсвенно получаем отлуп. Кстати, така конструкция в MsSQL катит без проблем, однако...

Я таки разобрался, как написать функцию, и как ее вызвать из hibernate, чтобы замапировать объект, по результату. Если кому интересно - примерчик дам. Ну и еще кой-чего веселого нарыл.
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33061571
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33063220
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Фуников Юрий.
А Вы пробовали повторить сей фокус? Я думаю, нет... Не работает это все, однако.
Может, я конечно и сам дурак, не во всем разбрался (хотя, я не один такой). Причина, которую я нашел, достаточно сушественная. Кстати, на тойже страничке (я практицыски все примеры, указанные там старался повторить в деле), есть 2-3 несущественные ошибки. В некоторых случаях просто XML не валидируется. На мой взгляд авторы сего описания брали для своих примеров не рабочий код, а так из головы, мол типа должно работать. Ну а Oracle вообще не проверяли.
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33065681
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и? no comments...
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33066453
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushok

Уважаемый, мне почему-то не нравится ваш тон :)

В другом вашем топике я привел рабочий пример с использованием Oracle 9 и SP

Насколько я выяснил в качестве loader хранимые процедуры еще не работают, хотя работают как named queries. Кроме того, в том виде в котором они пока предлогаются они совершенно безполезны. Как я уже писал в своем треде в "проектирование БД" query-support'а через ХП в hibernate пока нет. Hibernate team постоянно ведет работы в этом направлении, но на текущий момент их использование для загрузки сохораненных объектов не оправданно.

Тем не менее Ваше предположение о том что hibernate не дружит с oracle не верно (см. мой пример)

ЗЫ если вы начали изучать какой-то продукт, то, возможно, не стоит после первой же кочки говорить о его качестве и, тем более, убеждать в этом окружающих. У поддержки ХП для CRUD операций в orm-средствах есть своя история и ее надо знать, прежде чем говорить о качестве самих orm-продуктов
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33066461
вы еще подеритесь, братва!
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33068076
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Фуников Юрий,
Давайте не бум зацикливаться на тонах, иначе усе перерастет в не кому не нужную перепалку. Вы про hibernate знаете раз в 10 (может в 100) больше меня, так же Вас сложно заподозрить в каких то там интересах - hibernate бесплатен, не хошь, не ешь. Объяснение, о том, что hibernate team положило на stored procedures примлемо. Но непонятны 2 вещи

1) Почему сей неработающий коде попал в релиз (с неработающими примерами)
2) Почему hibernate team решило, что путь сохранения объектов через stored procedures не оправдан ?

На первый вопрос наверно нет ответа и Вы врядле мне тут поможете, если это только не простое разгильдяйство (хотели как лучше, получилось, как всегда). Во всяком случае это настораживает.

На второй вопрос Вы можете помочь. Мое мнение, что желание изолировать базу от разработчика (дать ему некий объекто-ориентированный layer и изолировать от RDB понятий) здесь еще пересеклось с желанием сделать порт на все (ну скажем самые популярные) базы. А стандарта на вызов, создание, внутренний яэык процедур/функций пока нема. Вот и нужно обойти эту неприятную тему пока стороной.

У меня, конечно свои, специфицкие взгляды, но я не раз встречал
1) Когда была некая policy на разработку web приложения - все изменения в базе только через процедуры. Причина - оптимизировать потом легче.
2) Оч.часто даже в простой select надо добавлять всякие там SQL-расширения, специфицкие, для базы (HINT для оракла, WITH для MsSQL) также в целях оптимизации.
3) Если у Вас достаточно большая таблица и надо ее листать, то использование ROWNUM c _веселым_ запросом не эффективно. Тормозит. Нужно сию проблему решать средствами базы.

Все это отнюдь не говорит, что hibernate никуда не годиться. Только о том, что у него есть некие рамки, и он не панацея.

И теперь я поясню, чем вызван мой такой _не_здоровый_ интерес к hibernate. Мой начальник ищет пути, как ускорить разработку. При этом есть некое мнение (не мое) что так-сяк работающий коде за неделю _выгоднее_ хорошо работаюшего за две. И hibernate в этом направлении может помочь. И я прихожу к выводу, что это действительно так ... Хотя, мне это совсем не нравиться.

Спасибо за пример, я попытаюсь разобраться, что там и как. Что нарою - опубликую. Вот тольки rar надо скачать где-то ...
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33068107
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо рар качать - вот .zip :)
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33068142
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь по делу

Давайте не бум зацикливаться на тонах, иначе усе перерастет в не кому не нужную перепалку.

Согласен, просто у меня есть сомнения в том что вы услышите то что я вам говорю. Судя по всему вам hibernate навязывают - поэтому налицо предвзятое негативное отношение...


1) Почему сей неработающий коде попал в релиз (с неработающими примерами)

действительно пока no comments

Почему hibernate team решило, что путь сохранения объектов через stored procedures не оправдан?
Они как раз решили наоборот и постепенно развивают продукт в этом направлении. Раньше SP для CRUD не поддерживались - теперь же есть поддержка для insert/update/delete и ведется работа по добавлению поддержки для load

Мое мнение, что желание изолировать базу от разработчика (дать ему некий объекто-ориентированный layer и изолировать от RDB понятий) здесь еще пересеклось с желанием сделать порт на все (ну скажем самые популярные) базы.

Я совершенно не согласен что hibernate кого-то от чего-то изолирует. Он решает вопрос персистизации объектов на java и все. И я не согласен что hibernate team делает порт на все - они используют jdbc, а та, в свою очередь, позволяет работать с большинством СУБД.

Я уже описал свое видение ORM-средств в своем треде http://www.sql.ru/forum/actualthread.aspx?tid=85698
По второму разу писать тоже самое я не хочу. Если действительно хотите разобраться - то, сначало, прочтите мои посты там.

1) Когда была некая policy на разработку web приложения - все изменения в базе только через процедуры. Причина - оптимизировать потом легче.
пожалуйста - как я уже писал insert/update/delete уже поддерживаются.

2) Оч.часто даже в простой select надо добавлять всякие там SQL-расширения, специфицкие, для базы (HINT для оракла, WITH для MsSQL) также в целях оптимизации.
Для этого есть named query - можно написать что угодно

Если у Вас достаточно большая таблица и надо ее листать, то использование ROWNUM c _веселым_ запросом не эффективно. Тормозит. Нужно сию проблему решать средствами базы.

Это отдельная тема и ее не стоит обсуждать здесь. Скажу лишь что неэффективность простого select'а одинакова как для простого jdbc так и для hibernate и его использование говорит о плохом дизайне приложения. Т.е. проблема лежит на другом уровне.
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33068415
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, прогнал Ваш пример про котов. И все работает у Вас. Стал разбираться. Пока про транзакции не нашел причину. А вот с вызовом SP разобрался. Ну вобщем вышла очередная feature (если багом не хочется обзывать). Итого, Ваш рабочий коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		System.out.println("[SELECT]"); // createN Query("FROM myown.hibernate3.tests.Cat cat ORDER BY cat.id")
		 for  (Iterator it = session.getNamedQuery("selectAllCats_SP")
.list()
.iterator();
it.hasNext();)
		{
			Cat cCat = (Cat)it.next();
			
			System.out.println("================");
			System.out.println(cCat.getId());
			System.out.println(cCat.getName());
			System.out.println(cCat.getWeight());
		}
И мой, который падает ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
		System.out.println("[SELECT]"); // createN Query("FROM myown.hibernate3.tests.Cat cat ORDER BY cat.id")
		 for  (Iterator it = session.getNamedQuery("selectAllCats_SP")
.setMaxResults(  2 )
.list()
.iterator();
it.hasNext();)
		{
			Cat cCat = (Cat)it.next();
			
			System.out.println("================");
			System.out.println(cCat.getId());
			System.out.println(cCat.getName());
			System.out.println(cCat.getWeight());
		}
Ну и ето ".setMaxResults( 2)" и явилось причиной появления такой странной (для оракла) конструкции как
Код: plaintext
SELECT * from ({ ? = call select_all_cats } where rownum <=  2 
Что ессевенно не работает.

Ну а транзакции я еще подергаю, хотя игра "найдите пару отличий" мне не очень по душе.

За _нерабочие_ примеры извиняюсь, они таки рабочие. Но проблема _подобных_ features остается - хотя-бы побольще информации в примерах бы давали, а то как описать в hbm.xml есть, а как вызвать - нема... Кстати, что касаемо SP, я еще кой-чего _нарыл_... Тольки сам разобрался.

Далее, к словам цеплятся не охота, но дык извините пожалуйста. Так, все же какое мнение у hibernate team. Один Ваш пост говорил
Уважаемый Фуников Юрий"Hibernate team постоянно ведет работы в этом направлении, но на текущий момент их использование для загрузки сохораненных объектов не оправданно."
а последний
Уважаемый Фуников Юрий"Они как раз решили наоборот и постепенно развивают продукт в этом направлении."
Таки немного противоречит друг другу. Хотя, я надеюсь второе вернее.

Ну и на последок по поводу
Уважаемый Фуников Юрий" ... персистизации объектов на java"
Это и есть некий layer. Можно пользовать _только_ его (о чем кстати Hibernate team _настоятельно_ рекомендует), а можно еще и применять свои SQL (чего мне оч. бы хотелось) но при этом нужно будет наступать на грабли типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
Integer id = Integer(  2 );
Cat cc = session.load( Cat. class , id);
...
// где-то выполнили SQL напрямую и удалили из базы кота с ID = 2
...
cc.setName( cc.getName() + '!');  // Таки здесь получили ошибку, так как 
                  // кот cc начал грузиться из базы тольки на cc.getName();
session.save( cc);

Тоже, может и вычурный пример, но вполне допустимый.

Ну вот, а про
Уважаемый Фуников Юрий1) Когда была некая policy на разработку web приложения - все изменения в базе только через процедуры. Причина - оптимизировать потом легче.
пожалуйста - как я уже писал insert/update/delete уже поддерживаются.
Вы меня не совсем поняли. Я имел ввиду не использовать insert/update/delete напрямую (сие работает!) а SP вместо них. Это тоже работает, но с некими выкрутасами для оракла. Для insert надо писать именно STORED PROCEDURE, а для update и delete - FUNCTION. Опять таки примеры недостаточны, я может чего и упустил - до всего доходил трассировкой кода, путь, сами понимаете не самый эффективный.

А что до
Уважаемый Фуников Юрий2) Оч.часто даже в простой select надо добавлять всякие там SQL-расширения, специфицкие, для базы (HINT для оракла, WITH для MsSQL) также в целях оптимизации.
Для этого есть named query - можно написать что угодно
Я то имел ввиду несколько другое - практически в кажный SQL может быть необходимость что-то добавить. При этом, ситуация, кады SQL генерится автоматицски - не очень приятна. Вот и все. Ну а Named Query - ценная штука, я супротив ничего не имею.

Про ROWNUM действительно не стоит - там много копьев наломать можно.

А так, большое спасибо за коментарии и примерчик, это помогло с кое-чем разобратся. Я не такой-уж hibernate-ненависник, хотя, придираюсь, не скрываю сего
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33083880
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй ADF BC
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33084266
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Мануальный Вы наш,
Вы меня куды-то послали, а куды, я и не понял, однако.

Поточнее можно, что сие ADF BC означат?
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33084439
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokПоточнее можно, что сие ADF BC означат?
тынц
Oracle Application Development Framework Business Components
если я правильно понял :)
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33084755
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем да
есле Вы используете Oracle
то они рекомендуют его использовать
тот жe OR/M маппанг с кешированием
но родной
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33084776
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopLink ?
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33084872
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное что нет
TopLink - это отдельный продукт
ADF BC - это набор бизнес компонет для работы с БД, как я понимаю продолжение bc4j
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33085880
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиб, посмотрим. Дело хорошее. А линка получне нету? Погуглить то я и сам могу =) Интерестно, как тама с лицензиями и прочим.

Кстати, TopLink нам не подходит, проверяли уже.
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33087186
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.oracle.com/technology/obe/obe9051jdev/index.htm
конкретнее
http://www.oracle.com/technology/documentation/jdev/adf_guidelines_manual.pdf
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33088305
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще разок спасиб!
...
Рейтинг: 0 / 0
Hibernate и Oracle
    #33090135
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есле что нароешь
пиши на mansch [@] mail.ru
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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