Czy możliwe jest wymuszenie klucza obcego bez odwzorowania obiektu na obiekt?

Zakładając, że podane są następujące mapowania:

<class name="A" table="a_table">
  <id name="id"/>
  <many-to-one name="entityB" column="fk_B" not-null="false" unique="true"/>
</class>

<class name="B" table="b_table">
  <id name="id"/>
</class>

Klasa Java:

public class A {
   private long id;
   private B entityB;
   // getters and setters skipped
}

Czy jest możliwe, aby zmienić mapowanie Hibernate tak, abyklucz obcy jest nadal wymuszany i tworzony przez Hibernate podczas uruchamiania, ale klasaA wyglądałby następująco:

public class A {
   private long id;
   private long idOfB;
   // getters and setters skipped
}

Rozumiem to, jeśli się nawrócę<many-to-one... w a<property... to działałoby, ale klucz obcy nie byłby wymuszany przez bazę danych.

Muszę to zrobić, ponieważ obiektB może (lub nie) zostać zainicjowane oddzielnie, co czasami powodujeorg.hibernate.LazyInitializationException: could not initialize proxy - no Session wyjątki, które wystąpią, gdya.getB() jest nazywany. Wolałbym mieć to jakolong idOfB i ładuj cały obiekt, gdy jest to konieczne; spowodowałoby to również ładowanie obiektuA szybciej.

Uważam, że moje pytanie jest bardzo podobne doten, jednak oferowane rozwiązanie (aby używać leniwego ładowania) nie jest odpowiednie w moim przypadku, nawet jeśli zadzwonięa.getB().getId(), DostanęLazyInitializationException mając na uwadze, że jeśli zadzwonięa.getIdOfB() Nie zrobiłbym tego.

Z góry dziękuję.

questionAnswers(4)

yourAnswerToTheQuestion