多对多GSP持久性

时间:2011-11-25 16:02:27

标签: jquery grails many-to-many gsp

我在员工和职位之间有多对多的关系。有人可以告诉我如何实施向员工添加职位吗?控制器和GSP到。我想在创建和更新emloyee GSP时实现这一点。 在员工create.gsp上,我想要输入用于输入员工姓名的文本字段,以及具有现有职位的组合框。此外,我想要添加位置按钮,这将呈现另一个组合框以添加更多位置。 对于我来说,作为一个绝对的开始,这并不是那么明显,并且没有很多关于此的例子。 有一个具体的例子会很有意思。

2 个答案:

答案 0 :(得分:0)

这些博文one-to-many-relationships-in-grails-formsgrails-one-to-many-dynamic-forms与您的问题密切相关。

他们都详述了不同的例子,并且很容易理解。

答案 1 :(得分:0)

老实说,stackoverflow适用于q& a,而不是“为我做这个”。

关于如何映射多对多的问题是有效的,一种非常常见的方法是只需要一个包含两种关系的连接表。

您可以通过反向工程来适应您的类的示例是来自spring-security-core的UserRole类。

class UserRole implements Serializable {

User user
Role role


static UserRole get(long userId, long roleId) {
    find 'from UserRole where user.id=:userId and role.id=:roleId',
        [userId: userId, roleId: roleId]
}

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 user, Role role, boolean flush = false) {
    UserRole instance = UserRole.findByUserAndRole(user, role)
    if (!instance) {
        return false
    }

    instance.delete(flush: flush)
    true
}

static void removeAll(User user) {
    executeUpdate 'DELETE FROM UserRole WHERE user=:user', [user: user]
}

static void removeAll(Role role) {
    executeUpdate 'DELETE FROM UserRole WHERE role=:role', [role: role]
}

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

删除了一些辅助内容,例如哈希码和克隆等。

基本思想是拥有一个包含两个类ID的连接表。