Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли подружить оракловый merge и hibernate / 16 сообщений из 16, страница 1 из 1
30.05.2013, 12:50:36
    #38280043
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Все привет,

можно ли подружить оракловый мерж и хибер?
Пробую делать через тег <sql-insert> (xml конфигурация).
Соответвенно пишу так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		<sql-insert>
			merge into mytable t
			using (select {1} as id, {2} as type_id from dual ) s 
				on
   			( t.id = s.id and  t.type_id=s.type_id)    
			when matched then 
     			update set t.status = 0
			when not matched then 
				insert (t.type_id, t.id)
				values (1,2); 
		</sql-insert>




Есть два вопроса:

1) По идее Хибер при инсерте ожидает получить новосгенеренный айдишник? А у меня то может произойти апдейт
2) Как протянуть свои значения вместо цифр в фигурных скобках? Тут проблема в том, что кастомный SQL не получится использовать ((( У меня отношение многие ко многим и с помощью мержа я как раз хочу сохранять дочерниче записи.


Спасибо
...
Рейтинг: 0 / 0
30.05.2013, 12:56:52
    #38280050
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
risk,
merge - это даже для БД крутая штука. Так сказать "умный объект SQL"
Навешивать её на ОРМ даже идеологически неверно. Подумайте от ех кто после вас)) IMHO
...
Рейтинг: 0 / 0
30.05.2013, 13:00:18
    #38280058
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Да у нас вот в чем проблема....
По всему проекту куча отношений многие-ко-многим, при этому записи удалять нельзя, а можно только изменять их статус при удалении, соответственно при повторной вставке должен происходить апдейт.....
Таких мест куча, надо однообразно решить эту проблему.

Пока что такой мерж кажется наиболее вменяемым решением.
...
Рейтинг: 0 / 0
30.05.2013, 13:07:49
    #38280067
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
riskмногие-ко-многим, при этому записи удалять нельзя, а можно только изменять их статус при удалении,
кошмар.
У меня был один раз теоретик-постановщик, которому было всё рано "Удалить" или "Пометить на удаление".
Сочувствую.
Теперь вы это потянете на ОРМ из СУБД.
Не знаю что тут посоветовать. Это эксклюзив проект)
...
Рейтинг: 0 / 0
30.05.2013, 13:13:56
    #38280075
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Ну кошмар не кошмар и делать что-то надо.

При этом, есть места где тянуться все записи с БД вне зависимости от статуса, а потом уже на стороне Явы фильруется перед тем как отдать на UI. Для этих случаев я запилил универсальный мержер с помощью генериков.

Но есть места в которых используются фильтра и тянутся только активные записи.... И тут начинает веселуха.

В идеале хотел бы все перевести все к одной модели - все записи фильтруются на уровне фетча с БД, а инсертятся уже мержем....
...
Рейтинг: 0 / 0
30.05.2013, 13:16:32
    #38280080
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
risk,

А может merge делать отдельно, вне ORM, а потом соответствующие объекты рефрешить?!
...
Рейтинг: 0 / 0
30.05.2013, 13:21:43
    #38280091
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
mad_nazgulrisk,

А может merge делать отдельно, вне ORM, а потом соответствующие объекты рефрешить?!

Ну в идеале я видел это так:

У меня есть например юзер, у него есть набор ролей, набор профилей, набор еще чего то там.

И вот у меня есть перзистент объект юзер. Я изменил его наборы ролей-профилей-чего бы либо. И потом просто делаю
getHibernateTemplate.saveOrUpdate(юзер);

И для каждого элемента каждого сета вызывается мерж.....


Что бы было удобно
...
Рейтинг: 0 / 0
30.05.2013, 13:24:04
    #38280100
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
riskmad_nazgulrisk,

А может merge делать отдельно, вне ORM, а потом соответствующие объекты рефрешить?!

Ну в идеале я видел это так:

У меня есть например юзер, у него есть набор ролей, набор профилей, набор еще чего то там.

И вот у меня есть перзистент объект юзер. Я изменил его наборы ролей-профилей-чего бы либо. И потом просто делаю
getHibernateTemplate.saveOrUpdate(юзер);

И для каждого элемента каждого сета вызывается мерж.....


Что бы было удобно

Кто мешает перегрузить saveOrUpdate юзер?!
И там тупо вызвать соответствующий merge ч/з JDBC?
...
Рейтинг: 0 / 0
30.05.2013, 13:25:11
    #38280104
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
))))))))
интересный подход....
...
Рейтинг: 0 / 0
30.05.2013, 13:28:40
    #38280114
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Сейчас смотрю в сторону класса org.hibernate.collection.PersistentSet.class или чего-то подобного, что бы в одной точке переопределить алгоритм сохранения списка в БД
...
Рейтинг: 0 / 0
30.05.2013, 15:47:23
    #38280386
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
risk))))))))
интересный подход....

А мне кажется стандартный.
Чем проще, тем лучше. ;-)

P.S. вот за это я не люблю различные ORM.
Что-то простое сделать еще можно, шаг в сторону, начинаются приключения.
...
Рейтинг: 0 / 0
30.05.2013, 16:19:48
    #38280446
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
mad_nazgulА мне кажется стандартный.
Чем проще, тем лучше. ;-)


видать вы не видели дефолтную реализацию
...
Рейтинг: 0 / 0
31.05.2013, 14:15:39
    #38281582
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
risk,

Как вариант поместить ваш merge в хранимую процедуру или функцию, и дергать ее.
...
Рейтинг: 0 / 0
31.05.2013, 16:48:47
    #38281801
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Максим Нrisk,

Как вариант поместить ваш merge в хранимую процедуру или функцию, и дергать ее.

Началось :-)
...
Рейтинг: 0 / 0
31.05.2013, 22:51:40
    #38282126
пролетевший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
Ну, во первых можно указать Hibernate свой SQL для сохранения , но это придется ручками все классы раскрашивать...
Лучше расширить Dialect (возможно еще какие то сервисы ) и генерировать MERGE вместо INSERT . Вся работа с Hobernate станет стандартной.
...
Рейтинг: 0 / 0
03.06.2013, 11:44:05
    #38283387
risk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли подружить оракловый merge и hibernate
пролетевшийНу, во первых можно указать Hibernate свой SQL для сохранения , но это придется ручками все классы раскрашивать...
Лучше расширить Dialect (возможно еще какие то сервисы ) и генерировать MERGE вместо INSERT . Вся работа с Hobernate станет стандартной.

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

Я так понимаю что самый нормальный варианта написать свою реализацию EntityPersister
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли подружить оракловый merge и hibernate / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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