package com.fp.persistence.pgeneral.acco;

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

import java.io.Serializable;
import javax.persistence.Table;
import com.fp.dto.hb.HibernateBean;
import javax.persistence.Version;
import java.lang.reflect.Field;

import javax.persistence.Transient;

/**Clase que implementa la entidad de Hibernate que hace referencia a la tabla TGENESEQUENTIALMODULE*/
@Entity(name="TgeneSequentialModule")
@Table(name="TGENESEQUENTIALMODULE")
public class TgeneSequentialModule extends com.fp.dto.AbstractDataTransport implements Serializable,HibernateBean,Cloneable{
	/**
	* HashCode asociado con la Instancia
	*/
	@Transient
	private int hashValue = 0;
	/**
	* Version de la Clase
	*/
	private static final long serialVersionUID = 1L;
	/**
	* Clave primaria de la Entidad TgeneSequentialModule
	*/
	@Id
	@Column(name="MODULECODE" ,nullable=false, updatable=false)
	private String pk;
	@Column(name="SEQUCODE", nullable=true)
	
	/**
	* Campo que almacena el codigo del secuencial de un numero de cuenta
	*/
	private String sequcode;
	
	@Version
	@Column(name="RECORDVERSION", nullable=true)
	
	/**
	* Optimistic locking del registro
	*/
	private Integer recordversion;
	
	/**Contructor por defecto*/
	public TgeneSequentialModule(){
	}
	/**Contructor de TgeneSequentialModule
	@param pPk Clave Primaria del entity
	*/
	public TgeneSequentialModule(String pPk){
	 this();
	 pk=pPk;
	}
	/**
	* Metodo que entrega datos de la tabla dada la clave primaria.
	* @param pEntityManager referencia de la session a obtener datos del bean.
	* @param pKey Caleve primaria del bean.
	* @return TgeneSequentialModule
	*/
	public static TgeneSequentialModule find(EntityManager pEntityManager,Object pKey) throws Exception{
	    TgeneSequentialModule obj = pEntityManager.find(TgeneSequentialModule.class,pKey);
	    return obj;
	}
	/**Entrega la Clave primaria de TgeneSequentialModule
	@return El objeto que referencia a la Clave primaria de TgeneSequentialModule
	*/
	public String getPk(){
	  return pk;
	}
	/**Fija un nuevo valor a la Clave primaria de TgeneSequentialModule
	@param pPk El objeto que referencia a la nueva Clave primaria de TgeneSequentialModule
	*/
	public void setPk(String pPk){
	  pk=pPk;
	}
	/**Obtiene el valor de sequcode
	@return valor de sequcode*/
	public String getSequcode(){
	  return sequcode;
	}
	/**Fija el valor de sequcode
	@param pSequcode nuevo Valor de sequcode*/
	public void setSequcode(String pSequcode){
	  sequcode=pSequcode;
	}
	
	/**Obtiene el valor de recordversion
	@return valor de recordversion*/
	public Integer getRecordversion(){
	  return recordversion;
	}
	/**Fija el valor de recordversion
	@param pRecordversion nuevo Valor de recordversion*/
	public void setRecordversion(Integer pRecordversion){
	  recordversion=pRecordversion;
	}
	
	public boolean equals(Object rhs){
	    if (rhs == null)return false;
	    if (! (rhs instanceof TgeneSequentialModule))return false;
	    TgeneSequentialModule that = (TgeneSequentialModule) rhs;
	    if (this.getPk() == null || that.getPk() == null)
	        return false;
	    return (this.getPk().equals(that.getPk()));
	}
	/**Implementación del metodo hashCode de la la entidad TgeneSequentialModule
	@return el hashCode la instancia
	*/
	public int hashCode()    {
	    if (this.hashValue == 0){
	        int result = 17;
	        if (this.getPk() == null){
	            result = super.hashCode();
	        }else{
	            result = this.getPk().hashCode();
	        }
	        this.hashValue = result;
	    }
	    return this.hashValue;
	}
	/**Implementación toString
	*/
	public String toString() {
		Field[]fs=this.getClass().getDeclaredFields();
		String data="";
		for(Field f:fs){
		 try{	
		 String name=f.getName();
	   if(f.getType().getName().compareTo("java.util.Set")==0)continue;
		 if(name.compareTo("hashValue")==0||name.compareTo("serialVersionUID")==0)continue;
			data+=name+"="+f.get(this)+";";
		 }catch(Exception e){
			 continue;
		 }
			}
			if(data.compareTo("")==0){
			data=super.toString();
			}
		return data;
		}
	/**Implementación de la creación de un bean en blanco TgeneSequentialModule
	*/
	public Object createInstance(){
	 TgeneSequentialModule instance=new TgeneSequentialModule();	
	 return instance;
	}
	/**Clona la entidad TgeneSequentialModule
	@see com.fp.dto.hb.HibernateBean#cloneMe()
	*/
	public Object cloneMe() throws CloneNotSupportedException{
	  TgeneSequentialModule p=(TgeneSequentialModule)this.clone();
	  return p;
	}

}
