【问题标题】:Creating an UPDATE RETURNING query in Hibernate在 Hibernate 中创建 UPDATE RETURNING 查询
【发布时间】:2012-03-12 18:20:54
【问题描述】:

在 Oracle 中,我们可以创建一个更新查询,该查询将使用 RETURNING 子句返回更新后的记录。

Hibernate 中是否有类似的功能?

【问题讨论】:

  • 保存后的对象不是已经更新了吗?
  • 是的,更新后保存的对象已经更新了。
  • 我想对于我们的案例来说,它更像是一种设计方法。这些请求是通过 web 服务调用发起的,然后更新数据库。我们决定将任何更新或创建的对象以适当的 HTTP 状态返回给用户。在我们的代码中,我们选择在 Web 堆栈上下跟踪更新。
  • 那么您应该只返回更新后的实例以及状态码。

标签: java database oracle hibernate


【解决方案1】:

除了数据库生成的值之外,Hibernate 显然不需要返回更新的实例,因为传递给 Session.saveOrUpdate() 的对象更新的实例。数据库生成的值(序列、触发器、默认值等)将在 Session.saveOrUpdate 之后设置,如果它们被相应地注释(或在 XML 映射文件中定义)。

对于identifier values,将JPA @javax.persistence.GeneratedValue 注释与JPA @javax.persistence.Id 注释结合使用。对于 simple properties 使用本地 Hibernate @org.hibernate.annotations.Generated 注释(afaik 没有相应的 JPA 注释)。

Hibernate 如何检索生成的标识符值取决于生成策略和/或数据库方言。对于简单的属性,Hibernate 在 INSERTUPDATE 之后执行额外的 SELECT by id 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2015-01-08
    • 1970-01-01
    • 2016-05-22
    • 2016-08-29
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多