在Hibernate @Generated注释中使用GenerationTime.INSERT的合理方案是什么?

时间:2013-08-15 11:40:11

标签: java hibernate

当我对实体进行更新时,我想知道Hibernate关于用 @Generated(value = GenerationTime.INSERT)注释的字段的行为。

我有一个具有以下字段的实体(由数据库触发器填充,第一个插入,第二个插入和每次更新):

@Generated(value = GenerationTime.INSERT)
@Column(name="created_by", insertable = false, updatable = false)
private String createdBy;

@Generated(value = GenerationTime.ALWAYS) 
@Column(name="updated_by", insertable = false, updatable = false)
private String updatedBy;
  • 当我从数据库加载实体时,两个字段都会填充 - 正如预期的那样
  • 当我从web-ui收回实体时,两个字段都将为null - 正如预期的那样,因为它们没有绑定到任何表单字段。

致电后

sessionFactory.getCurrentSession().saveOrUpdate(object);

createdBy字段将为null,但updatedBy字段将设置为正确的值(由数据库创建)。

因此实体不再包含数据库中的值 - 这是一种不受欢迎的行为。

对于我的情况可以解决问题 - 我可以将GenerationTime更改为ALWAYS - 但这似乎令人困惑,因为createdBy实际上只在插入实体时设置。 - 我可以对实体进行刷新 - 但我想避免额外的通话。

  1. 描述情况的最佳做法是什么? 是否有更好的选项可以避免显式调用刷新,并且不会模糊仅在插入时修改的字段的语义?
  2. 使用@Generated(value = GenerationTime.INSERT)的合理方案是什么?

1 个答案:

答案 0 :(得分:-1)

你能尝试这样吗?     @Temporal(TemporalType.TIMESTAMP)     @Generated(GenerationTime.ALWAYS)     @Column(name =" create_date",insertable = false,updatable = false)     私人日历createDate;