假设提供了以下映射:
<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...
成 a<property...
这会起作用,但数据库不会强制执行外键。
我需要这样做,因为对象B
可能(或可能不会)单独初始化,这有时会导致
调用org.hibernate.LazyInitializationException: could not initialize proxy - no Session
时发生异常。a.getB()
我更愿意将它作为一个long idOfB
并在必要时加载整个对象;这也将使对象的加载A
更快。
我相信我的问题与这个问题非常相似,但是所提供的解决方案(使用延迟加载)在我的情况下并不合适,因为即使我打电话a.getB().getId()
,我也会得到LazyInitializationException
,而如果我打电话a.getIdOfB()
我不会。
首先十分感谢。