Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建后立即休眠加载对象_Java_Hibernate_Spring_Orm_Persistence - Fatal编程技术网

Java 创建后立即休眠加载对象

Java 创建后立即休眠加载对象,java,hibernate,spring,orm,persistence,Java,Hibernate,Spring,Orm,Persistence,我有一个Hibernate实体,它有一个或多个当您需要从数据库中刷新对象的状态时,使用refresh()load和get从会话中返回对象(如果对象已经存在)。因此,您的第二个选项需要刷新,然后从会话中删除实体,然后重新加载它(对您知道的数据发出select查询)。调用refresh也可以做同样的事情,更容易,但仍然会发出一个额外的select查询 我真的更喜欢第一个选项:只要确保每次设置关联时,都会映射相应的映射属性。您负责实体的一致性和不变量(与双向关联一样,在双向关联中,双方都必须保持一致)

我有一个Hibernate实体,它有一个或多个
当您需要从数据库中刷新对象的状态时,使用
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>