При условии предоставления следующих сопоставлений:
<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>
Класс Java:
public class A {
private long id;
private B entityB;
// getters and setters skipped
}
Можно ли изменить отображение Hibernate так, чтобы внешний ключ по-прежнему применялся и создавался Hibernate при запуске , но класс A
будет выглядеть следующим образом:
public class A {
private long id;
private long idOfB;
// getters and setters skipped
}
Я понимаю, что если я преобразую <many-to-one...
в <property...
, это сработает, но внешний ключ не будет применен базой данных.
Мне нужно сделать это, потому что объект B
может (или не может) инициализироваться отдельно, что иногда вызывает
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
исключения, возникающие при вызове a.getB()
. Я бы предпочел иметь его как long idOfB
и загружать весь объект всякий раз, когда это необходимо; это также ускорит загрузку объекта A
.
Я полагаю, что мой вопрос очень похож на на этот , однако предлагаемое решение (для использования отложенной загрузки) не подходит в моем случае, так как даже если я позвоню a.getB().getId()
, я получу LazyInitializationException
тогда как если бы я позвонил a.getIdOfB()
, я бы не стал.
Заранее большое спасибо.