从1.3.7升级到2.2.2后,域类关系查询无法正常工作

时间:2013-12-17 19:39:48

标签: hibernate grails

我正在将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问题?

1 个答案:

答案 0 :(得分:0)

第一件事,也是最简单的,如果你把孩子作为一个列表(在这种情况下为List),hibernate希望在表中看到一个索引列,以便它知道列表中每个孩子的位置。那里的SQL异常似乎指向了这一点。

至于第一个问题,它似乎不是一个休眠的,因为你只是迭代已经加载的对象。您没有包含UserProfile,因此不确定它是否与该对象有任何关系。

我的第一步是将一些登录信息放入这些闭包中,看看发生了什么。或者,如果您是调试器粉丝,请使用它。