каскадное сохранение в спящем режиме, ключ foregin сохраняется как ноль - PullRequest
0 голосов
/ 21 июля 2011

У меня есть класс следующим образом

class A{
 Set<B> = new HashSet<B>();

}

class B{
  A a;

}

Теперь первичный ключ A генерируется автоматически, поэтому я не могу установить его ранее в A или B.B с обратным отображением A. И объект в B изначально нулевой. Это соответствует 2 таблицам A и B в DB. Теперь, если у меня есть объект A, набор которого содержит 2 записи, тогда, когда я сохраняю объект A, тогда создаются две записи в B. Теперь мой код работает нормально. Но когда я вижу записи в B я нахожу внешний ключ, соответствующий A, пуст.

TABLE B structure
BId Aid Bname  

// Aid - это внешний ключ первичного ключа A tablles, а Aid хранится как ноль, почему так? Я хочу, чтобы Aid автоматически сохранялся в B

1 Ответ

4 голосов
/ 21 июля 2011

Необходимо правильно установить обе стороны отношения

parentA.getBChilds().add(childB);  
childB.setParentA(parentA); <-- Important see link below working bi

Вы можете создать методы управления ссылками в родительском элементе, чтобы правильно установить обе стороны.

public class ParentA
{
...    
public void addChildB(B pChild)
{
    this.childsB.add(pChild);
    pChild.setParentA( this );
}    
...
}

Установите для атрибута 'инверсия' значение true в отношении сбора

<set name="bChilds" inverse="true">
    <key column="bID"/>
    <one-to-many class="childB"/>
</set>

Может быть, вы смешиваете инверсное и каскадное. Для хорошего объяснения вы можете прочитать эту запись в блоге об атрибуте обратного перехода в спящий режим причудливую интерпретацию обратного спящего режима Hibernates;) и этот документ в режиме гибернации по рабочие двунаправленные ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...