gpt4 book ai didi

grails - 为什么 UserRole 实现 Serializable 并覆盖 equals() 和 hashcode() 方法

转载 作者:行者123 更新时间:2023-12-02 14:43:51 25 4
gpt4 key购买 nike

在 Grails 中,Spring 安全核心插件有助于创建用户和角色域。由于其中的多对多关系,创建了第三个域 UserRole。

UserRole.groovy

import org.apache.commons.lang.builder.HashCodeBuilder

class UserRole implements Serializable {

private static final long serialVersionUID = 1

User user
Role role

boolean equals(other) {
if (!(other instanceof UserRole)) {
return false
}

other.user?.id == user?.id &&
other.role?.id == role?.id
}

int hashCode() {
def builder = new HashCodeBuilder()
if (user) builder.append(user.id)
if (role) builder.append(role.id)
builder.toHashCode()
}

static UserRole get(long userId, long roleId) {
UserRole.where {
user == User.load(userId) &&
role == Role.load(roleId)
}.get()
}

static UserRole create(User user, Role role, boolean flush = false) {
new UserRole(user: user, role: role).save(flush: flush, insert: true)
}

static boolean remove(User u, Role r, boolean flush = false) {

int rowCount = UserRole.where {
user == User.load(u.id) &&
role == Role.load(r.id)
}.deleteAll()

rowCount > 0
}

static void removeAll(User u) {
UserRole.where {
user == User.load(u.id)
}.deleteAll()
}

static void removeAll(Role r) {
UserRole.where {
role == Role.load(r.id)
}.deleteAll()
}

static mapping = {
id composite: ['role', 'user']
version false
}
}

我从未见过或创建过实现 Serializable 接口(interface)的域类。我认为 grails 在内部处理序列化过程。那么为什么 UserRole 实现 Serializable ?在这里重写 equals() 和 hascode() 方法有什么好处,因为 UserRole 的 id 已经复合在 User 和 Role 上?

最佳答案

关于grails - 为什么 UserRole 实现 Serializable 并覆盖 equals() 和 hashcode() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21872846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com