【问题标题】:Can Hibernate automatically select after insert?插入后Hibernate可以自动选择吗?
【发布时间】:2015-07-31 01:33:48
【问题描述】:

我正在使用 Hibernate saveOrUpdate(object) 将对象插入到表中。这个对象确实有一个自动生成的 ID 字段和一个由数据库在插入时设置的“createdDate”字段。插入后,java对象中的ID字段有了新生成的值,但'createdDate'字段仍然为空。

有没有办法(配置或设置或参数)可以告诉Hibernate在插入完成后自动选择新行,从而完全填满内存中的Java对象?用户“保存”对象后,网页在该对象上保持打开状态,以便用户编辑更多字段(仅在初始插入后可用),因此我想向用户显示这些生成的字段( ID、createdDate )。

** 编辑 **

由于得到答复,我正在为对象添加 HBM.XML 文件:

<hibernate-mapping>
  <class name="MyObject" table="MyObject">
      <id name="objectId" type="java.lang.Integer">
          <column name="Object_ID" />
          <generator class="identity" />
      </id>
      . . .  other attributes . . .
      <property name="createdDate" type="timestamp" update="false" insert="false">
          <column name="Created_Date" not-null="true" />
      </property>
  </class>
</hibernate-mapping>

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    @Generated注释属性

    @Generated(GenerationTime.INSERT)
    private Date creationDate;
    

    请注意,这将产生成本。您可以简单地在代码中生成 creationDate,而不是在数据库中(使用侦听器或 JPA @PrePersist 注释)。

    【讨论】:

    • 感谢您的回复。我不使用注释,我使用 HBM.XML 文件,所以我将它包含在上面。我宁愿数据库插入日期,因为我还有其他生成的字段和触发器。我将如何更新 HBM.XML 以模仿注释?在 INSERT/UPDATE 完成后是否会选择任何指定为“生成”的字段?
    • 啊,是的,太完美了!我的一个担忧是,如果 Hibernate 为 3 个生成的字段做了 3 个单独的选择,但它很好地将它们组合成一个选择。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2014-10-17
    • 2016-05-16
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多