我正在开始对我的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)
为什么会发生这种情况的任何提示?
答案 0 :(得分:1)
我没有对此进行过测试,但我认为您的问题在于:
blockedUsers(unique:true)
你有没有理由将blockUsers指定为List而不是GORM的默认Set?使用Set,成员的唯一性是自动的,然后您不必使用唯一约束,这在一对多属性上无法正常工作。此外,这是无关的,但明文密码是淘气的。