Grails(Hibernate)在插入之前选择而不传递id参数值

时间:2011-08-28 09:10:25

标签: hibernate postgresql grails gorm

我正在开始对我的grails web-app进行更严格的测试,现在是时候从hsqldb转到postgres了。一切都或多或少都没问题,但是在创建测试数据时我在Bootstrap中遇到错误。在将行插入数据库之前,Hibernate会尝试执行select操作。 不幸的是,当这样做时,它不会将参数传递给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 个答案:

答案 0 :(得分:1)

我没有对此进行过测试,但我认为您的问题在于:

blockedUsers(unique:true)

你有没有理由将blockUsers指定为List而不是GORM的默认Set?使用Set,成员的唯一性是自动的,然后您不必使用唯一约束,这在一对多属性上无法正常工作。此外,这是无关的,但明文密码是淘气的。