hibernate - Grails/hibernate 标准ID inList

标签 hibernate grails groovy criteria

这个问题是基于我问的here。相同的关系和相同的目标。我有一个Thing实例。我想获取与Bar的所有实例相关联的Foo的所有实例,这些实例与我拥有的Thing实例相关联。

我的模型中有一个方法可以根据某些条件返回对象列表。

class Foo {

    static List findAllAssociatedWith( Object obj ) {
        def results = null
        if( obj instanceof Bar) {
            results = Foo.withCriteria() {
                bars{
                    //inList( "id", Thing.bars.id ) // this does not work
                    inList( "id", [new Long(3), new Long(4)] ) // this works
                }
            }
        }
        return results
    }
}
Thing.bars.id返回我要检查的id的列表,但是显然它是一个ArrayList of Integers,即使需要Longs。这是我得到的错误:
java.util.ArrayList cannot be cast to java.lang.Long. Stacktrace follows:
Message: java.util.ArrayList cannot be cast to java.lang.Long

为什么Thing.bars.id返回一个Integer列表而不是Longs列表,我该如何解决?

更新:

我在调用println Things.bars.id后发现了问题。我希望它返回一个数字的ArrayList(整数或长整数),如下所示:
[3,4]

但是我得到了一个ArrayLists的ArrayList,其中第一个数组列表是我想要的,而第二个数组列表是一个空列表,如下所示:
[ [ 3, 4 ], [] ]

不确定为什么Grails会这样做,但是现在解决这个问题的一种简单方法是Thing.bars.id.get( 0 )

最佳答案

泛素细菌,您可以通过使用flatten方法将数组数组展平为简单数组
Thing.bars.id.flatten()

您的[[3,4],[]]变成[3,4]

关于hibernate - Grails/hibernate 标准ID inList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124686/

相关文章:

java - DBUnit 不重置序列

java - 无法运行共享 Groovy 库函数

java - 提取 EXI 压缩的 XML 时出现编码问题

Jenkins/Groovy 将变量移出到配置文件

java - Hibernate 正确的级联映射

java - @GenerateValue 可以与非主键属性一起使用吗?

grails - Spring Security在Bootstrap期间返回空的SecurityContext

hibernate - 将 Grails 域类映射到 joinTable 的问题

java - 我的 hibernate 代码检索记录不起作用

java - 我想在不直接使用 JavaScript 的情况下制作一个 "Web 2.0"应用程序