作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在Grails 2.5.3中有一个系统,并且在测试和生产环境中Bootstrap文件存在问题。在 DEV环境中,初始数据加载可以正常工作。
使用的域类。 SecUser - Spring 安全性
class SecUser implements Serializable {
...
UUID id
Date dateCreated
String username
String password
String email
....
}
class User extends SecUser {
UUID id
String name
...
// Relations
static belongsTo = [department:Department]
static hasMany = [evaluations:Evaluation]
}
class Evaluation {
UUID id
Integer attemptNumber
Date completenessDate
Integer maxAttempt
String testName
Float testScore
// Relations
static belongsTo = [user:User]
}
// Role
def adminRole = new SecRole(authority: 'ROLE_ADMIN')
def userRole = new SecRole(authority: 'ROLE_USER')
// Administrator
def newAdmin = new SecUser(
username: 'admin',
password: 'admin',
email: 'admin@example.com')
// Department
def idDepartment = new Department(name: 'I+D')
// Normal user
def newUser = new User(
username: 'user',
password: 'user',
email: 'user@example.com',
name: 'userTest',
department: idDepartment
)
// Evaluation
def evalUser = new Evaluation(
testName: 'Test example',
attemptNumber: 1,
maxAttempt: 2,
completenessDate: new Date(),
testScore: 7.55,
user: newUser)
// Saving roles
adminRole.save(flush: true, failOnError: true)
userRole.save(flush: true, failOnError: true)
// Saving new admin
newAdmin.save(flush: true, failOnError: true)
// Saving departments
idDepartment.save(flush: true, failOnError: true)
// Saving new users
newUser.save(flush: true, failOnError: true)
// Assign user to role
if (!newAdmin.authorities.contains(adminRole)) {
SecUserSecRole.create newAdmin, adminRole, true
}
if (!newUser.authorities.contains(userRole)) {
SecUserSecRole.create newUser, userRole, true
}
// Saving evaluations - HERE IS THE ERROR
evalUserSTT1.save(flush: true, failOnError: true)
最佳答案
这是由于以下事实:在开发环境中,数据源配置设置为dbCreate =“create-drop”,这意味着每次重新启动应用程序时,它都会丢弃并重新创建数据库。但是,在测试和生产环境中,将其设置为dbCreate =“update”,其中它仅更新新更改。现在,根据您的 bootstrap 代码,您无需在保存之前检查对象是否存在,因此 bootstrap 代码将尝试创建与第一次运行时已经存在的角色和用户相同的角色和用户,从而导致冲突。
总而言之,修改您的 bootstrap 代码以检查记录是否已存在,这只是一个示例,但是对于其他角色和用户等也必须执行相同的操作,例如:
def adminRole
def adminRoleExists = SecRole.findByAuthority('ROLE_ADMIN')
if(!adminRoleExists ) {
adminRole = new SecRole(authority: 'ROLE_ADMIN')
adminRole.save(flush: true, failOnError: true)
}
关于grails - 约束错误…在生产和测试环境中的外键。开发人员运作良好。 - Cereal ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366678/
我是一名优秀的程序员,十分优秀!