Hibernate @Generated注释效果不佳

时间:2017-06-16 15:49:11

标签: hibernate orm

我想使用@ 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'但它也没有用。

1 个答案:

答案 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