如何插入/更新注释为@CreationTimestamp的实体属性?

时间:2015-05-27 16:01:35

标签: spring hibernate jpa

    <!-- Override TextViewStyle style for AppThemeLight-->
            <style name ="AppThemeLight.TextBlockStyle" parent="@style/TextBlockStyle">
                <item name="android:textColor">@color/my_purple</item>
                <item name="android:textSize">20sp</item>
            </style>
<!-- Override TextViewStyle style for AppThemeDark-->
            <style name ="AppThemeDark.TextBlockStyle" parent="@style/TextBlockStyle">
                <item name="android:textColor">@color/my_green</item>
                <item name="android:textSize">40sp</item>
            </style>

我有上面的实体使用Hibernate。我有一个要求,我需要更新createdAt字段,但当我尝试遵循它没有工作。 createdAt是从创作之日起生效的。

    @Entity
    @Table(name="transactions")
    @NamedQuery(name="Transaction.findAll", query="SELECT t FROM Transaction t")
    public class Transaction implements Serializable{
        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id", nullable=false, unique=true, length=11)
        private int id;


        @CreationTimestamp
        @Column(name="created_at")
        private Date createdAt;
}

有没有办法保留@CreationTimestamp注释,并且能够在需要时修改或设置另一个日期?

**我正在使用Hibernate 4和Spring。任何解决方案或其他建议都将受到高度赞赏**

1 个答案:

答案 0 :(得分:4)

为什么要手动设置?更清洁的解决方案是在您的实体类中使用2个方法。这两个注释都来自持久性包。

private Date creationTime;
private Date modificationTime;

@PrePersist
public void prePersist() {
    Date now = Date();
    this.creationTime = now;
    this.modificationTime = now;
}

@PreUpdate
public void preUpdate() {
    this.modificationTime = Date();
}

或者最好使用Java 8 / Jodatime类,在这种情况下你需要手动设置@Type字段,因为据我所知Hibernate不支持它们。