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ę.