我们的某些表有触发器,因此它们会在每次put操作后更新插入/修改的实体。
如何指示Hibernate在put()操作后立即读取实体,以便应用程序始终可以访问从DB读取的最准确数据(包括触发器修改的数据)。 为简单起见,假设在put()操作之后触发器立即触发。
我正在寻找像select-after-update或select-after-insert之类的注释。 如果我可以在插入/更新后指定要读取的列,那么更好的解决方案就是。
更新
@Generated注释在我的情况下不起作用,因为我正在使用@ColumnTransformer注释来修改已修改的日期here。
@Generated完全失败,因为它让Hibernate相信数据库会为它产生价值。因此,在插入/更新期间,将忽略在列上指定的自定义写入SQL。
我想要@Generated注释中的重新加载功能,但在插入/更新期间没有忽略字段部分。
答案 0 :(得分:1)
答案 1 :(得分:1)
我认为不能在一次操作中完成。正如你所说@Generated将忽略该列而@PostPersist和@PostUpdate无法调用EntityManager或查询(参见文档https://docs.jboss.org/hibernate/core/4.0/hem/en-US/html_single/#d0e2985)
此外,如果您在同一个事务中执行此操作,那么当您尝试再次加载数据时,是什么保证您执行触发器?
正如我所看到的,唯一的出路是在对象的保存或更新之后,在另一个事务中刷新()。