Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Problem / 9 сообщений из 9, страница 1 из 1
21.03.2007, 12:06:50
    #34405323
Oscar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Problem
Здравствуйте,

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

Спасибо!

Буду рад ответить на дополнительные вопросы, чтобы уточнить вопрос.
...
Рейтинг: 0 / 0
21.03.2007, 12:25:32
    #34405407
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Problem
Тебе надо прописать правильный 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
21.03.2007, 12:50:19
    #34405504
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate Problem
BlazkowiczТебе надо прописать правильный generator в маппинге.
Вот такой пример берет ID из sequence
Код: plaintext
1.
2.
3.
4.
5.
6.
...
        selectSequenceCurrentValString = dialect.getSelectSequenceNextValString(sequenceName)
.replace("nextval", "currval");
        this.idType = type;
    }  

}

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

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

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

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


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


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