Java 创建后立即休眠加载对象
我有一个Hibernate实体,它有一个或多个Java 创建后立即休眠加载对象,java,hibernate,spring,orm,persistence,Java,Hibernate,Spring,Orm,Persistence,我有一个Hibernate实体,它有一个或多个当您需要从数据库中刷新对象的状态时,使用refresh()load和get从会话中返回对象(如果对象已经存在)。因此,您的第二个选项需要刷新,然后从会话中删除实体,然后重新加载它(对您知道的数据发出select查询)。调用refresh也可以做同样的事情,更容易,但仍然会发出一个额外的select查询 我真的更喜欢第一个选项:只要确保每次设置关联时,都会映射相应的映射属性。您负责实体的一致性和不变量(与双向关联一样,在双向关联中,双方都必须保持一致)
当您需要从数据库中刷新对象的状态时,使用refresh()
load
和get
从会话中返回对象(如果对象已经存在)。因此,您的第二个选项需要刷新,然后从会话中删除实体,然后重新加载它(对您知道的数据发出select查询)。调用refresh也可以做同样的事情,更容易,但仍然会发出一个额外的select查询
我真的更喜欢第一个选项:只要确保每次设置关联时,都会映射相应的映射属性。您负责实体的一致性和不变量(与双向关联一样,在双向关联中,双方都必须保持一致)
第三个选项是完全删除mapped属性,只需调用entity.getKey().getSomeRef().getId()。谢谢,但正如我所说的,如果您的实体有多个映射,那么使用第一个选项会非常困难。我的一些实体大约有10个从属实体,将它们全部设置将是一场噩梦:(注意:如果其他人使用这种方法,请不要忘记在刷新()之前执行会话.flush()
。有关更多详细信息,请参阅:
<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>