我正在将grails应用程序从grails版本1.3.7升级到2.2.2。我使大部分代码都工作,除了这个。相同的代码在grails 1.3.7中工作但停止工作并在grails 2.2.2中出错。请帮忙。以下是导致问题的类。 域类User,UserConfig和Service类UserService。
public class User implements Serializable {
String id
...
static hasMany = [userConfigs:UserConfig]
static mapping = {
version false
table 'c_user'
id column: 'id'
}
}
public class UserConfig implements Serializable
{
UserProfile profile
String genesysUserId
static belongsTo = [user: User]
static mapping = {
version false
table 'sp_user_config'
id composite:['user', 'profile']
user column: 'user_id'
profile column: 'profile_id', lazy: false
}
}
public class UserService {
boolean transactional = true
def getUserList(groupIdList) {
def userList = User.list()
userList.findAll() { user ->
user.userConfigs?.find() { userConfig ->
groupIdList.contains(userConfig?.profile?.group?.id)
}
}
}
}
我上了课; java.lang.IllegalArgumentException异常 消息:参数类型不匹配 在第
行的UserService.groovy课程中 user.userConfigs?.find() { userConfig->
和行userList.findAll() { user->
如果我将'List userConfigs'添加到用户域类
public class User implements Serializable {
String id
List<UserConfig> userConfigs
...
static hasMany = [userConfigs:UserConfig]
static mapping = {
version false
table 'c_user'
id column: 'id'
}
}
我得到了Class:java.sql.SQLException 消息:ORA-00904:“USERCONFIG0 _”。“USER_CONFIGS_IDX”:来自同一类UserService的无效标识符和相同的代码行。
这是grails问题的新版本还是hibernate问题?
答案 0 :(得分:0)
第一件事,也是最简单的,如果你把孩子作为一个列表(在这种情况下为List),hibernate希望在表中看到一个索引列,以便它知道列表中每个孩子的位置。那里的SQL异常似乎指向了这一点。
至于第一个问题,它似乎不是一个休眠的,因为你只是迭代已经加载的对象。您没有包含UserProfile,因此不确定它是否与该对象有任何关系。
我的第一步是将一些登录信息放入这些闭包中,看看发生了什么。或者,如果您是调试器粉丝,请使用它。