2012-01-25 2 views
0

У меня есть необязательная взаимосвязь между двумя классами. Hibernate преобразует свойство как необязательное, установив внешние ключи равными нулю.Hibernate: необязательно много-к-одному с не-нулевыми столбцами

Моя db-схема не позволяет столбцам иметь значение null. Свойство, которое будет необязательным, представлено значением по умолчанию для этих столбцов.

<class name="sth.Alpha" ...> 
    .... 
    <many-to-one name="beta" not-found="ignore" class="sth.Beta" insert="true" update="true"> 
     <column name="a1/> 
     <column name="a2/> 
    </many-to-one> 
</class> 

<class name="sth.Alpha" ...> 
    <composite-id> 
     <key-property name="b1" type="int"> 
      <column name="b1" precision="8" scale="0"/> 
     </key-property> 
     <key-property name="b2" type="int"> 
      <column name="b2" precision="8" scale="0"/> 
     </key-property> 
    </composite-id> 
</class> 

выбор данных не является проблемой из-за not-found="ignore" в мае-к-одному-теге это приведет к null - beta -объекту. Но если я хочу вставить Alpha? с beta установлен на null. Я получаю исключение, что невозможно вставить null в a1 и a2.

Я избавлюсь от этой проблемы, если установить insert и update на false. Но это приводит к невозможности сохранения отношения, если оно установлено.

Database-схема не может быть изменен и Hibernate-версия фиксируется до 3,5

Я также был бы рад, если бы вы сказать мне, что это не возможно

ответ

3

how to use 0 instead of null в сочетании с <id unsavedvalue="whatever"> может помочь

или

other solution

+0

Привет, спасибо за ваш ответ, звучит многообещающе. Но страница, с которой вы связываетесь, по крайней мере на несколько дней вниз. Но я попробую свойство unsavedvalue – thomas