Grails (Hibernate) делает выбор перед вставкой без передачи значения аргумента id - PullRequest
0 голосов
/ 28 августа 2011

Я начинаю более серьезные тесты моего веб-приложения grails, и пришло время перейти от hsqldb к postgres.Все прошло более-менее нормально, однако я получаю сообщение об ошибке в Bootstrap при создании тестовых данных.Hibernate пытается сделать выбор перед вставкой строки в базу данных.К сожалению, при этом он не передает аргумент в select, и я получаю исключение, говоря, что значение параметра 1 не указано.

Вот мой класс домена:

class User {

static constraints = {
    deviceId(
            blank: false,
            unique: true,
    )
    userName(nullable: true, size: 5..15, blank: false, unique: true)
    password(nullable: true, size: 5..15, blank: false)
    email(nullable: true, email: true, blank: false, unique: true)
    blockedUsers(unique: true)
}
static mapping = {
    table "player"
    deviceId indexColumn: [name: "deviceId", unique: true]
}
static mappedBy = [inbox: 'userTo', outbox: 'userFrom']
static hasMany = [profiles: Profile, inbox: Message, outbox: Message, blockedUsers: User]

List<User> blockedUsers = new ArrayList<User>()
String deviceId
String userName
String email
String password
Boolean readyForExport = false
Boolean newUser = false
[...]
}

, поэтомув этом нет ничего особенного.До этой ошибки у меня было довольно много команд .save (flush: true) в других доменах, и все в порядке.Именно эта ошибка выдает: /

Это строки, ответственные за эту ошибку.

User userA = new User(userName: "test", password: "dkjughey3htg", email: "integration@test.com", deviceId: 'intTestDevice')
userA.save(flush:true)

Любые советы, почему это может произойти?

1 Ответ

1 голос
/ 28 августа 2011

Я не проверял это, но я думаю, что ваша проблема в:

blockedUsers(unique:true)

Есть ли причина, по которой вы указываете blockUsers в качестве списка, а не в GORM по умолчанию для Set?С помощью Set уникальность членов автоматически, и тогда вам не нужно использовать уникальное ограничение, которое не работает, как вы могли ожидать от свойств один-ко-многим.Кроме того, это не связано, но незашифрованные пароли нецензурные.

...