2013-09-09 3 views
0

У меня есть следующие отношения для самостоятельной ссылки. Пользователь может иметь много друзей.Саморегулируемые отношения с недвижимостью в Grails?

class User { 

    String name 

    hasMany = [friends: User] 
} 

Что Hibernate делает в моей базе данных MySql, это создать таблицу user_user.

Теперь я хочу добавить свойство, как Дата lastUpdated для отношений друзей. Как я могу это сделать?

ответ

0

Возможно, здесь я ошибаюсь, но, похоже, это невозможно. Причина состоит в том, что таблица user_user не поддерживает прямой домен, поскольку она представляет собой только взаимосвязь между доменами, а не самим доменом.

Один из вариантов заключается в управлении отношения в классе картографа, очень нравится, как Spring Security Core PersonAuthority class

class Friendship implements Serializable { 

    User user //may need some mappedBy config in User class 
    User friend 
    Date lastUpdated 

    ... //helper methods, see PersonAuthority class for example 

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

И так как это фактический класс домена, вы можете включать в себя дополнительные атрибуты, как ваш lastUpdated.

UPDATE для комментариев: Вы должны действительно проверить PersonAuthority class для примера - вам не нужно явно объявлять какие-либо отношения в классе пользователя, поскольку теперь они управляются Дружбу. Вы можете добавить вспомогательные методы в классе User для запроса Дружбы для отношений.

Например:

class User ... 

    ... 
    Set<User> getFriends() { 
    Friendship.findAllByUser(this).collect { it.friend } as Set 
    } 
} 
+0

что я должен делать в пользовательском классе? – confile

+0

Как сделать сопоставление в классе User? – confile