数据库触发后刷新实体

时间:2019-04-05 15:03:39

标签: hibernate jpa

我想更新实体的某些字段,然后返回更新的实体。相应的表具有一个更新触发器,该触发器在列中设置当前时间戳记(我想在数据库级别而不是通过JPA进行此操作)。

首先,我使用entitymanager的find()方法通过其ID检索现有实体,然后使用实体的设置器更新某些字段。但是,当我返回该实体时,即使通过更新触发器在数据库表中对其进行了更新,我的Java实体的更新列/字段也没有更新。

在设置更改后的值后,我尝试了entitymanager的refresh()方法,但是这似乎使我的所有更改无效(可能是因为尚未提交实体?)。

1)除了让事务提交然后使用find()重新检索实体之外,还有没有更好的方法来获取正确的值?

2)我不太确定如何注释实体中的“最后更改”列。注释字段(仅由数据库触发器更改)的最佳方法是什么?现在正在使用(因为我只希望数据库触发器更新此字段):​​

@Column(name = "last_changed", nullable = false, insertable = false, updatable = false)

有人对此有帮助吗?感谢您的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

  

1)除了让我们获得更好的值外,还有没有更好的方法   提交事务,然后使用重新获取实体   find()?

@JBNizet评论:“因此,您需要先调用flush(),然后再刷新()。”

  

2)我不太确定如何注释我的“最后更改”列   实体。注释字段的最佳方法是什么,只能更改   是由数据库触发器触发的?

除了@Column批注(将insertable和updateable设置为false)之外,还可以使用休眠注释@Generated,如图in this answer here.所示 但是,这破坏了任何“仅JPA”方法。