java - Hibernate 在创建后立即加载对象

标签 java hibernate spring orm persistence

我有一个 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) 仅通过初始化必要的参数(例如上例中的主键 idsomeRef)来创建实体,然后立即保存并重新加载。加载应初始化 mappedProperty自动或按需提供延迟初始化。

我更喜欢选项 2),但是,我注意到在某些情况下,mappedProperty属性未设置。 load()返回与我传递给 create() 相同的对象,仅初始化主键。我仍然不确定为什么会发生这种情况,但为了解决这个问题,我必须将对象从 Hibernate session 中分离出来,所以 load()将被迫进入数据库并重新获取。再说一遍,听起来太复杂了,不是吗?

我在这里遗漏了什么吗?还有其他方法可以解决这个问题吗?

最佳答案

当您需要从数据库刷新对象的状态时,请使用refresh()

关于java - Hibernate 在创建后立即加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901611/

相关文章:

java - HttpServletRequest isUserInRole() - 如何获得完整的角色列表?

java - 无法从 servlet 上下文中检索 hibernate 外键

database - 我的 H2/C3PO/Hibernate 设置似乎没有保留准备好的语句?

java - 如果我的值存储在线程安全映射中,该值是否需要是 ThreadLocal?

java - 为什么要使用简单最近最少使用缓存机制?

java - 尝试构建文件时出现 Ant 错误,找不到 tools.jar?

java - Hibernate中save()和update()有什么区别

java - 如何在 spring mvc 中的服务器端验证上显示错误消息

java - Spring配置类如何获取其方法所期望的对象实例?

java - 将 BufferedImage 保存为 TIFF 文件?