CreateUpdateBase.java

package com.tradecloud.common.base;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Base class for any entity that requires create/update time stamps.
 *
 * Currently this is handled by two event listeners configured in hibernate.cfg.xml
 *
 * However, once we move to JPA then the @PreUpdate and @PrePersist annotations should be sufficient
 *
 */
@MappedSuperclass
public class CreateUpdateBase {

    @Column(nullable = true)
    protected Date created;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = true)
    protected Date updated;

    @PrePersist
    protected void onCreate() {
        Date timeStamp = new Date();
        updated = timeStamp;
        created = timeStamp;
    }

    @PreUpdate
    protected void onUpdate() {
        updated = new Date();
    }

    public Date getCreated() {
        return created;
    }

    public Date getUpdated() {
        return updated;
    }

    /**
     * TODO - remove the below once we get the @Preupdate and @PrePersist
     * annotations working.
     */

    public void setCreated(Date date) {
        this.created = date;
    }

    public void setUpdated(Date date) {
        this.updated = date;
    }
}