java 实体成员数量_java – 带有集合的JPA实体对分离成员上的...

我有两个JPA实体类,Group和User

Group.java:

@Entity

@Table(name = "groups")

public class Group {

@Id

@GeneratedValue

private int id;

@ManyToMany

@JoinTable(name = "groups_members", joinColumns = {

@JoinColumn(name = "group_id", referencedColumnName = "id")

}, inverseJoinColumns = {

@JoinColumn(name = "user_id", referencedColumnName = "id")

})

private Collection members;

//getters/setters here

}

User.java:

@Entity

@Table(name = "users")

public class User {

private int id;

private String email;

private Collection groups;

public User() {}

@Id

@GeneratedValue

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

@Column(name = "email", unique = true, nullable = false)

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

@ManyToMany(fetch = FetchType.LAZY)

@JoinTable(name = "groups_members", joinColumns = {

@JoinColumn(name = "user_id")

}, inverseJoinColumns = {@JoinColumn(name = "group_id")})

public Collection getGroups() {

return groups;

}

public void setGroups(Collection groups) {

this.groups = groups;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (!(o instanceof User)) return false;

User user = (User) o;

if (id != user.id) return false;

return email.equals(user.email);

}

@Override

public int hashCode() {

int result = id;

result = 31 * result + email.hashCode();

return result;

}

}

我尝试为具有一个成员的组运行以下代码段,其中group是刚从JpaRepository检索的实体,user是该组和分离实体的成员.

Collection members = group.getMembers();

System.out.println(members.contains(user)); //false

User user1 = members.iterator().next();

System.out.println(user1.equals(user)); //true

经过一些调试后,我发现在.contains()调用期间调用了User.equals(),但是Hibernate集合中的用户有空字段,因此.equals()被评估为false.

那么为什么它如此奇怪以及在这里调用.contains()的正确方法是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值