我想使用@ org.hibernate.annotations.Generated更新' lastModified'字段自动,这是我的代码:
比尔:
@Entity
public class Bill {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
protected Long id;
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable = false, updatable = false)
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)
protected Date lastModified;
@Column
protected String description;
public void setDescription(String description) {
this.description = description;
}
public Date getLastModified() {
return lastModified;
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
public String getDescription() {
return description;
}
}
主:
public static void main(String[] args) {
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Bill bill1 = new Bill();
session.persist(bill1);
Bill bill2 = new Bill();
session.persist(bill2);
bill1.setDescription("Bill1 modified");
tx.commit();
factory.close();
}
当我手动检查sql账单时,显示:
id |描述| lastModified |
--- | -------------- | ---------------- |
1 | Bill1修改了|空
2 | null |空
我的hibernate版本是5.2.9.Final,而mysql版本是5.7.16。我试图删除' insertable = false,updatable = false'但它也没有用。
答案 0 :(得分:2)
您可以改为使用@CreationTimestamp和@UpdateTimestamp:
@CreationTimestamp
private Date created;
@UpdateTimestamp
private Date lastModified;
使用这些注释生成的时间戳是基于VM时间的内存生成。
如果您需要数据库生成的时间戳,则必须使用标有@ValueGenerationType的自定义注释。
有关详细信息,请参阅以下链接:http://docs.jboss.org/hibernate/orm/4.3/topical/html/generated/GeneratedValues.html#_in_database_generation