как я могу добавить список целых чисел в класс домена grails

#grails #grails-2.0 #grails-domain-class

#grails #grails-2.0 #grails-domain-class

Вопрос:

Я создал класс домена, как указано ниже, который содержит int и список целочисленных свойств.

 class User {

    int UserId
    List<Integer> UserFriendsId 

    static constraints = {
    }

    User() {
        this.UserId = 21
        this.UserFriendsId=[1,2,3]
    }
}
 

Таблица, созданная для этого класса домена при сохранении, выглядит следующим образом

     mysql> select * from user;
 ---- --------- --------------------- 
| id | version | UserId              |
 ---- --------- --------------------- 
|  1 |       0 |                  21 |
|  2 |       0 |                  21 |
|  3 |       0 |                  21 |
 ---- --------- --------------------- 
3 rows in set (0.00 sec)
 

столбец для userFriendsId (т. Е. Для списка целых чисел) не генерируется в этой таблице user .

итак, как можно решить эту проблему или добавить список целых чисел в класс домена grails.

Ответ №1:

Список UserFriendsId должен отображаться как базовый тип коллекции GORM, а не просто быть списком в классе пользовательского домена:

 class User {

    int userId

    static hasMany = [userFriendsIds: Integer]

    static mapping = {
        userFriendsIds joinTable: [name: "user_id", column: "friend_id", type: Integer]
    }

    static constraints = {
    }

    User() {
    }
}
 

Комментарии:

1. Я пробовал этот метод, но не работает.. в этом случае .. но работает в случае списка строк

2. Я обновил пример, чтобы использовать сопоставление с объединяемыми таблицами, чтобы убедиться, что в сопоставлении не используется зарезервированное имя столбца.

3. Вы также должны отметить, что имена свойств userId и userFriendsId начинаются со строчной буквы вместо заглавной.

4. Я также пробовал сопоставление… например, объединяемая таблица userFriendsIds: [имя: «user_id», столбец: «user_friends_ids», тип: Integer], но это не работает.

5. Можете ли вы включить ведение журнала SQL для источника данных? Посмотрите на logSql по адресу grails.org/doc/2.2.1/guide/conf.html#dataSource

Ответ №2:

Почему бы просто не сделать UserFriendsId строкой, разделенной запятыми?

 class User {

    int UserId
    String UserFriendsId 

    static constraints = {
    }

    User() {
        this.UserId = 21
        this.UserFriendsId = "1,2,3"
    }
}
 

Затем:

 for (userId in UserFriendsId.get(21).split(','))
{
    println userId.toInteger()
    /// Or do whatever ...
}
 

Комментарии:

1. Итак, мы не можем сохранить список целых чисел в классе домена grails?