相关疑难解决方法(0)

617
推荐指数
11
解决办法
57万
查看次数

正确的实施方式等于合同

我有一个名为User的域对象.用户的属性包括ssoId,name,email,createdBy,createdDate和userRole.其中,ssoId必须是唯一的,因为没有两个用户可以拥有相同的sso id.所以我的equals方法检查sso id并返回true或false.

@Override public boolean equals(Object o) {
    if (!(o instanceof User))
      return false;
    return user.getSsoId().equals((User)o.getSsoId());
}
Run Code Online (Sandbox Code Playgroud)

我觉得这是一个不正确的实现,尽管就业务规则而言是正确的.对于具有相同sso id但具有不同的名称或电子邮件或两者的值的两个对象,上述实现将返回true.我应该更改我的平等合同以检查所有字段的相等性吗?你的建议是什么?

java

18
推荐指数
1
解决办法
1万
查看次数

如何在JPA的BaseEntity中实现equals()和hashcode()方法?

我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类.

@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    private static final long serialVersionUID = -3307436748176180347L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", nullable=false, updatable=false)
    protected long id;


    @Version
    @Column(name="VERSION", nullable=false, updatable=false, unique=false)
    protected long version;
}
Run Code Online (Sandbox Code Playgroud)

每个JPA实体都延伸BaseEntity并继承idversion属性BaseEntity.

这里实施equals()hashCode()方法的最佳方法是BaseEntity什么?BaseEntity将继承equals()hashCode()行为形式的每个子类BaseEntity.

我想做这样的事情:

public boolean equals(Object other){
        if (other instanceof this.getClass()){ //this.getClass() gives class object but instanceof operator expect …
Run Code Online (Sandbox Code Playgroud)

java jpa equals tostring hashcode

5
推荐指数
1
解决办法
3603
查看次数

在Hibernate中存储在Set中时,equals()和hashCode()

在第4.3章的Hibernate文档中." 实现equals()和hashCode() "他们写了这句话:

"此外,如果一个实例未保存并且当前在一个Set中,保存它将为该对象分配一个标识符值.如果equals()hashCode()基于标识符值,则哈希码将改变,违反合同集."

我不明白它打破了什么合同以及可以从中获得什么问题.

java hibernate jpa

4
推荐指数
1
解决办法
2840
查看次数

标签 统计

java ×4

equals ×2

hashcode ×2

jpa ×2

hibernate ×1

overriding ×1

tostring ×1