ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

Playframeworkを使うときによく書くクラス

Playframeworkでモデルクラスの基底としてよくこんなの書きますよ。

package models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.MappedSuperclass;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.hibernate.annotations.Type;
import org.joda.time.DateTime;

import play.db.jpa.JPA;
import play.db.jpa.JPASupport;

/**
 * <pre>
 * JPAエンティティの基底クラス
 * 
 * 登録/更新日時の編集と論理削除のサポート
 * </pre>
 * @see {@link play.db.jpa.JPASupport}
 * @author ikeda.t
 *
 */
@MappedSuperclass
public abstract class MyJPAModel extends JPASupport {

	public Date createDateTime;
	public Date updateDateTime;
	public int status = 0;
	
	/**
	 * <pre>
	 * saveのオーバーライド
	 * createDateTimeとupdateDateTimeの自動更新をサポート
	 * @see {@link play.db.jpa.JPASupport#save()}
	 * </pre>
	 * @param <T>
	 * @return オブジェクト
	 */
	@Override
	public <T extends JPASupport> T save(){
		this.createDateTime = (this.createDateTime==null)? new DateTime().toDate() : this.createDateTime;
		this.updateDateTime = new DateTime().toDate();	
	
		return super.save();
	}
	
	/**
	 * <pre>
	 * 論理削除のサポート
	 * statusを1に更新する
	 * </pre>
	 * @param <T>
	 * @return 
	 */
	public <T extends JPASupport> T disable(){
		this.status = 1;
		return this.save();
	}
	
	@Override
	public String toString(){
		return new ReflectionToStringBuilder(this,ToStringStyle.SHORT_PREFIX_STYLE).toString();
	}
	
    	@Override
    	public boolean equals(Object o) {
        	return EqualsBuilder.reflectionEquals(this, o);
    	}

    	@Override
    	public int hashCode() {
        	return HashCodeBuilder.reflectionHashCode(this);
    	}
}