为hibernate新建一个实体对象基类

来源:互联网 发布:监控服务器软件 编辑:程序博客网 时间:2024/03/29 16:54
代码如下:
public class BaseModel implements Serializabled{

private static final long serialVersionUID = 78745678432415476434L;

private String id;

public String getId(){return id;}
public void setId(String id){this.id = id;}
public boolean equals(Object obj){
    //记得这个重载的函数的参数是Object,因为父类中的equals的参数是Object
       if (this == obj)return true;//其实如果这里不执行这段代码,后面也可以判断,这样写可以提高效率
       if (!(obj instanceof BaseModel))return false;//这里判断是为了,下面类型转换时不会抛出异常
       BaseModel target = (BaseModel)obj;
       //这里的ID通常来说是作为一个主键,我们可以在映射文件中设置类型时为:<generator class ="uuid.hex">即自动加一
       if (null != this.getID() && this.getId().length() > 0)return this.getID().equals(target.getID);
       //如果上面的返回没执行,则说明id没有得到值,这时如果target得到了,因为NULL与任何数据都不相等
       if (null != target.getId()&&target.getId.length()>0)return false;
    //现在看来,如果两者都为空,就调用以下这个辅助方法了
      return EqualsBuilder.reflectionEquals(this, obj);
   //EqualsBuilder是org.apache.commons.lang中辅助设计Object.equals()的一个类;它可以自调用appendSuper()或append()方法一级一级扩展,相当于多个equals的与操作。
}
//对EQLUALS重写以后,也要重写hashCode,因为equals有一个规则,那就是如果equals()相等的两个对象引用,他们的hashCode要相同
public int hashCode(){
   if (null != this.getId() && this.getId().length()>0)return this.getID().hashCode();
   return HashCodeBuilder.reflectionHshCode(this);
}
public String toString(){return ReflectionToStirngBuilder.toString(this);}
}

注意,前面的id,如果当前对象的引用只是new之后,他的ID是没有值的,所以在这里用的是:
getId().length()>0,也就是说如果连主键都没有,也就无所谓这两个对象是不是相等了。

Hibernate并不要求持久化类必须实现java.io.Serializable接口,但是对于采用分布式结构的Java应用,当Java对象在不 同的进程节点之间传输时,这个对象所属的类必须实现Serializable接口,此外,在Java Web应用中,如果希望对HttpSession中存放的Java对象进行持久化,那么这个Java对象所属的类也必须实现Serializable接 口。













原创粉丝点击