我有一个 Hibernate 实体,其中包含一个或多个 <many-to-one
映射,例如
<hibernate-mapping>
<class name="MyClass" table="my_table">
<cache usage="nonstrict-read-write"/>
<composite-id>
<key-property name="id" length="30"/>
<key-property name="someRef" length="30" column="foreign_key_to_something"/>
</composite-id>
<many-to-one name="mappedProperty" column="foreign_key_to_something" insert="false" update="false"/>
<property name="foo" column="foo"/>
...
</class>
</hibernate-mapping>
我需要创建这样一个实体并立即访问mappedProperty
创建后。我在这里可以看到两种方法:
1) 创建实体并设置所有相关<many-to-one
手动映射。这种方法的明显缺点是需要跑腿,特别是如果映射的数量 <many-to-one
实体含量高。如果框架可以为您做一些事情,为什么还要手动做一些事情呢?
2) 仅通过初始化必要的参数(例如上例中的主键 id
和 someRef
)来创建实体,然后立即保存并重新加载。加载应初始化 mappedProperty
自动或按需提供延迟初始化。
我更喜欢选项 2),但是,我注意到在某些情况下,mappedProperty
属性未设置。 load()
返回与我传递给 create()
相同的对象,仅初始化主键。我仍然不确定为什么会发生这种情况,但为了解决这个问题,我必须将对象从 Hibernate session 中分离出来,所以 load()
将被迫进入数据库并重新获取。再说一遍,听起来太复杂了,不是吗?
我在这里遗漏了什么吗?还有其他方法可以解决这个问题吗?
最佳答案
当您需要从数据库刷新对象的状态时,请使用refresh()
。
关于java - Hibernate 在创建后立即加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901611/