Hibernate 将grails从1.3.7升级到2.2.2后,域类关系查询不起作用

Hibernate 将grails从1.3.7升级到2.2.2后,域类关系查询不起作用,hibernate,grails,Hibernate,Grails,我正在将我的grails应用程序从grails版本1.3.7升级到2.2.2。除此之外,我使大多数代码都能工作。同样的代码在Grails1.3.7中工作,但在Grails2.2.2中停止工作并出现错误。请帮忙。下面是导致问题的类。 域类User、UserConfig和服务类UserService public class User implements Serializable { String id ... static hasMany = [userConfigs:UserCon

我正在将我的grails应用程序从grails版本1.3.7升级到2.2.2。除此之外,我使大多数代码都能工作。同样的代码在Grails1.3.7中工作,但在Grails2.2.2中停止工作并出现错误。请帮忙。下面是导致问题的类。 域类User、UserConfig和服务类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'
  }

}
我得到了类:java.sql.SQLException 消息:ORA-00904:USERCONFIG0。USER\u CONFIGS\u IDX:来自同一类UserService和同一行代码的无效标识符


这是grails问题还是hibernate问题的新版本?

第一件事,也是最简单的一件事是,如果您将子项作为列表,hibernate希望在表中看到一个索引列,以便知道每个子项在列表中的位置。SQL异常似乎指向了这一点

至于第一个问题,它似乎不是hibernate问题,因为您只是在已经加载的对象上进行迭代。您没有包括UserProfile,所以不确定它是否与该对象有关


我的第一步是将一些日志记录到这些闭包中,看看发生了什么。或者如果你是调试器迷,请使用它。

请发布完整的stacktrace和服务代码。你在服务方法中使用@TypeChecked吗?我没有使用@TypeChecked注释。有趣的是,UserService中的同一段代码可以在在Grails控制台中成功运行。发现UserService类中的同一段代码可以成功运行而没有问题是非常有趣的。那么,tomcat插件是否可能存在问题?请注释掉userConfigs行列表,看看是否有效。或者,添加到oracle抱怨的列中