Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写JPA实体中必需的hashCode、equals和get/set方法?_Java_Jpa_Eclipselink - Fatal编程技术网

Java 重写JPA实体中必需的hashCode、equals和get/set方法?

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

我有个问题要问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 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>这对你有帮助吗?如果你认为它是不要忘记向上投票