0
我開始對我的grails web-app進行更嚴格的測試,現在是從hsqldb移動到postgres的時候了。一切都差不多,但是我在創建測試數據時在Bootstrap中出現錯誤。 Hibernate在將一行插入數據庫之前會嘗試執行選擇。 不幸的是,這樣做時它不會將參數傳遞給select,並且我收到異常,說未指定參數1值。Grails(Hibernate)在插入之前沒有通過id參數值進行選擇
這裏是我的領域類:
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: "[email protected]", deviceId: 'intTestDevice')
userA.save(flush:true)
任何提示爲什麼會發生這種情況?
嗨喬丹。你是對的,這個約束是阻止bootstrap的執行,然而...列表給了我一些設置不正確的順序。在這種情況下,它不是必需的,但是這樣做可能是因爲在其他幾個地方我們需要正確的順序,並且通過使用列表而非其他方式更容易實現它。是的......明文密碼是頑皮的,因爲它對Grails啓動的時間影響,所以我寧願將spring安全性作爲公共測試之前的最後一個步驟之一;)再次感謝! – Krystian
很酷。如果您想使用列表,您可以執行自定義約束來測試唯一性,而不是內置的唯一約束。 –