Java 重写JPA实体中必需的hashCode、equals和get/set方法?
我有个问题要问JPA。是否绝对有必要创建一个覆盖的hashCode方法和一个覆盖的equals方法,如下所示:Java 重写JPA实体中必需的hashCode、equals和get/set方法?,java,jpa,eclipselink,Java,Jpa,Eclipselink,我有个问题要问JPA。是否绝对有必要创建一个覆盖的hashCode方法和一个覆盖的equals方法,如下所示: @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean e
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
UserContent other = (UserContent) obj;
if (id == null) {
return false;
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
我还想知道,是否必须实现get-and-set方法。或者他们可以省略,在哪些情况下可以省略
这样的方法也有必要吗
@Override
public boolean isNew() {
return this.id == null;
}
我使用EclipseLink作为JPA提供者
非常感谢!
Maik覆盖hashCode()
和equals()
对于集合中的实体非常重要。其他实体并不严格要求这样做,但系统地覆盖它们是一种良好的做法,这样您就不会忘记在以后添加新关系时添加它们
setter和getter不是强制性的。但同样,最好将所有实例字段设置为私有,并通过公共getter和setter访问它们
至于
isNew()
方法,它只是一种常用的实用方法,根本不是必需的。它取决于并借鉴了JPA2.0规范
主键类必须定义equals和hashCode方法。这个
这些方法的值相等语义必须与
键所指向的数据库类型的数据库相等性
映射
如果将可嵌入类用作映射键,则该可嵌入类必须
按照
可嵌入文件映射到的数据库列
关于getter和setter:
实体类必须遵循方法签名
JavaBeans读/写属性的约定(由
当
使用属性访问
最后,只需要键来覆盖equals和hashcode,实体应该但不是必需的,只有在使用属性访问时才需要谈论getter和setter,但请记住,实体上的字段不能是公共的,因此如果没有getter和setter,您将如何设置或获取属性
类的实例变量必须是私有的、受保护的或
包可见性与字段访问或属性无关
使用访问权限。使用属性访问时,属性访问器
方法必须是公共的或受保护的
实际上,标有@Id的键不应该有setter,以避免手动设置该信息。显然,如果在集合中使用实体,则应该考虑重写它们以充分利用集合素材。
关于方法是新的我从来没有听说过有关它,所以它不是必需的,实际上JPA不使用它从来没有在规格。< /P>这对你有帮助吗?如果你认为它是不要忘记向上投票