gpt4 book ai didi

mysql - 无法在 Grails 应用程序中更新 mysql 中的表

转载 作者:行者123 更新时间:2023-11-29 20:07:25 32 4
gpt4 key购买 nike

我有一个奇怪的问题。我在 Grails 应用程序中有一个 User 域类。类如下:

class User {

transient springSecurityService

String username
String name
String password
String email
String company
Date activationDate
String contactPhone
boolean enabled
boolean passwordExpired = false
boolean accountExpired
boolean accountLocked
boolean isDeleted=false
boolean isPrimary
String jobTitle
String jobFunction
String deskPhone
String mobile
String profilePicURL
boolean isLinkExpired=false
UserType userType
Date dateCreated
Date lastUpdated

static constraints = {
password nullable: true
company nullable: true
email blank: false, unique: true
name nullable: true
activationDate nullable:true
username nullable: true
enabled nullable: false
isDeleted nullable: false
passwordExpired nullable: false
jobFunction nullable:true
jobTitle nullable:true
contactPhone nullable:true
mobile nullable:true
profilePicURL nullable:true
deskPhone nullable:true
userType nullable:true

}
static auditable = true
static mapping = {
password column: '`password`'
tablePerHierarchy false
cache true
}

Set<Role> getAuthorities() {
UserRole.findAllByUser(this).collect { it.role } as Set
}

还有一个方法activeDeactiveUser,它可以启用/禁用某些功能的用户授权,如下所示:

def activeDeactiveUser(String username) {
def user = User.findByUsername(username)

if (user.enabled == false)
user.enabled = true
else
user.enabled = false

if (user.validate()) {
user.save(flush: true, failOnError: true)
} else {
user.errors.allErrors.each {
print it
}
}

def userJson = new JSONObject()
userJson.put("isEnabled", user.enabled)

return userJson
}

当应用程序在本地主机上运行时,表更新正常。但是当相同的代码在服务器上运行时,表无法更新。我不知道为什么它会这样。该应用程序不会在本地主机上的保存方法上引发任何异常。问题可能出在我的机器和服务器上的 mysql 版本不同。当应用程序在服务器上运行时,是否有任何方法可以对其进行调试?

该应用程序托管在运行 Ubuntu 14.04 和 Grails 版本 2.4.3 的 AWS EC2 实例中。该数据库存储在运行 mysql 5.5.40 的 AWS RDS 实例中。

最佳答案

造成这种情况的原因有很多 - 我认为您需要为自己以及在此线程中提供更多信息,以便我们可以提供帮助。我建议,首先通过以下选项之一添加日志信息:

  1. 您可以将 logSql 添加到数据源文件:

     dataSource {
    logSql = true
    }
  2. 要生成比简单 logSql 更具可读性的 SQL 命令,需要在 DataSource.groovy 中添加以下属性:

    hibernate {
    format_sql = true
    use_sql_comments = true
    }

    然后,将以下 log4j 设置添加到 Config.groovy:

    log4j = {
    debug 'org.hibernate.SQL'
    trace 'org.hibernate.type'
    }

    第一个设置记录 SQL 命令,第二个设置记录绑定(bind)参数和结果集的绑定(bind)。

该问题也可能与架构更新有关 - 因此您的本地数据库架构可能与服务器之一不同步。您需要检查字段类型和约束。

关于mysql - 无法在 Grails 应用程序中更新 mysql 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40301031/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com