Grails(Hibernate)在插入之前进行选择,但不传递id参数值

Grails(Hibernate)在插入之前进行选择,但不传递id参数值,hibernate,postgresql,grails,gorm,Hibernate,Postgresql,Grails,Gorm,我正在开始对我的GrailsWeb应用程序进行更为严肃的测试,是时候从hsqldb转向postgres了。一切都进行得差不多,但在创建测试数据时,我在引导中遇到了一个错误。Hibernate在将行插入数据库之前尝试进行选择。 不幸的是,这样做时,它不会将参数传递给select,我得到的异常是没有指定参数1的值 以下是我的域类: class User { static constraints = { deviceId( blank: false,

我正在开始对我的GrailsWeb应用程序进行更为严肃的测试,是时候从hsqldb转向postgres了。一切都进行得差不多,但在创建测试数据时,我在引导中遇到了一个错误。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
[...]
}

有什么建议可以解释为什么会发生这种情况吗?

我还没有测试过,但我认为您的问题在于:

blockedUsers(unique:true)

是否有理由将blockedUsers指定为列表而不是GORM的默认设置?使用Set时,成员的唯一性是自动的,然后您就不必使用唯一约束,这与您在一对多属性上预期的效果不同。此外,这是不相关的,但明文密码是顽皮的。

hi Jordan。您是正确的,这个约束是阻止引导执行的原因,但是。。。列表给了我一些设置不正确的东西-正确的顺序。在这种情况下,它是不需要的,但是它是这样做的,可能是因为在其他一些地方,我们需要正确的顺序,并且使用列表而不是其他方式更容易实现。是 啊明文密码很淘气,我更喜欢将spring安全性作为公共测试前的最后一步,因为它对grails启动有时间影响;)再次感谢!酷。如果要使用列表,可以执行自定义约束来测试唯一性,而不是内置的唯一性约束。
blockedUsers(unique:true)