#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?