powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Problem
9 сообщений из 9, страница 1 из 1
Hibernate Problem
    #34405323
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Скажите, пожалуйста, как заставить Hibernate сохранить запись с ID равным NULL. Дело в том, что в таблице есть trigger, который сам устанавливает нужный ID. Для того, чтобы он срабатывал, необходимо вставлять запись ID равным NULL.

Спасибо!

Буду рад ответить на дополнительные вопросы, чтобы уточнить вопрос.
...
Рейтинг: 0 / 0
Hibernate Problem
    #34405407
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе надо прописать правильный generator в маппинге.
Вот такой пример берет ID из sequence
Код: plaintext
1.
2.
3.
4.
        <id name="id" column="ID">
			<generator class="sequence">
				<param name="sequence">CONSUMER_SEQUENCE</param>
			</generator>
        </id>
Нашел один проект где у нас тоже были ID на триггерах. Там сделано так:
Код: plaintext
1.
2.
3.
4.
        <id name="id"  column="CON_PEND_ITEMS_ID">
            <generator class="com.domain.model.TriggerGenerator">
	            <param name="sequence">seq_con_pend_items_id</param>
            </generator>
        </id>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 public   class  TriggerGenerator  extends  AbstractPostInsertGenerator  implements  Configurable
{
     private  String selectSequenceCurrentValString;
     private  Type idType;

     public   void  configure(Type type, Properties params, Dialect dialect)  throws  MappingException
    {
        String sequenceName = PropertiesHelper.getString(SequenceGenerator.SEQUENCE, params, "hibernate_sequence");
        selectSequenceCurrentValString = dialect.getSelectSequenceNextValString(sequenceName).replace("nextval", "currval");
         this .idType = type;
    }
    
     protected  String getSQL(PostInsertIdentityPersister persister)
    {
        String selectByUniqueKeyString = persister.getSelectByUniqueKeyString(selectSequenceCurrentValString);
         return  selectByUniqueKeyString;
    }

     protected  Serializable getResult(SessionImplementor session, ResultSet rs, Object object, PostInsertIdentityPersister persister)  throws  SQLException
    {
         if  ( !rs.next() ) 
        {
             throw   new  IdentifierGenerationException( "can't locate last inserted id");
        }
         return  (Serializable) idType.nullSafeGet(rs, persister.getRootTableKeyColumnNames(), session, object);
    }
}
...
Рейтинг: 0 / 0
Hibernate Problem
    #34405504
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТебе надо прописать правильный generator в маппинге.
Вот такой пример берет ID из sequence
Код: plaintext
1.
2.
3.
4.
5.
6.
...
        selectSequenceCurrentValString = dialect.getSelectSequenceNextValString(sequenceName)
.replace("nextval", "currval");
        this.idType = type;
    }  

}

Классно :)
...
Рейтинг: 0 / 0
Hibernate Problem
    #34405882
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz , спасибо большое за ответ!

Тем не менее, я попытался использовать ваш пример, но на
Код: plaintext
String selectByUniqueKeyString = persister.getSelectByUniqueKeyString(selectSequenceCurrentValString);

Возникает ошибка org.hibernate.MappingException: unknown property
...
Рейтинг: 0 / 0
Hibernate Problem
    #34405981
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас на Hibernate 3.0 работало. А покажи весь стек ошибки.
...
Рейтинг: 0 / 0
Hibernate Problem
    #34406101
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczУ нас на Hibernate 3.0 работало. А покажи весь стек ошибки.
Дело в том, что мне не нужно, передавать какие то sequence'ы в entity id mapping для класса генератора. Нужно просто инициализировать этот столбец через триггер. В этом вся проблема :(

Кстати, я использую hibernate 3.1.3 ...
...
Рейтинг: 0 / 0
Hibernate Problem
    #34406452
rusBob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Я конечно могу ошибаться, но Id воспринимается как первичный ключ, и null недопустимы, так что боюсь это невозможно. Я с этим сталкивался когда с помощью ejb3 цеплялся к MS SQL и делал перелив в другую СУБД, и ситуация была аналогичной, там был тригер, но ентити-мэнеджер не воспринимал бизнес объекты пока я там не поставил ограничение первичного ключа, только после этого он позволил создать классы.
Честно говоря не могу понять как мог хибер работать при допустимых null значениях, ведь ограничение primary key не допускает null значение, или я не прав?


Я болею за СКА РОСТОВ!!!
Трепещи Москва, мы уже в первой лиге ;-)
...
Рейтинг: 0 / 0
Hibernate Problem
    #34406794
pasha701
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может
<generator class="assigned">
??
...
Рейтинг: 0 / 0
Hibernate Problem
    #34407170
Oscar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть у кого нибудь еще примеры? Спасибо заранее!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Problem
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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