hibernate - Grails/hibernate 标准ID inList

这个问题是基于我问的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]

https://stackoverflow.com/questions/11124686/

相关文章:

perl - Perl的system()是否自动在Cygwin中转义字符?

for-loop - 无法在for循环中的子句中执行exe

scala - 斯卡拉调度以编程方式登录网站

scala - 如何转换 Play ! 2.0 Scala文件转换为CSVReader格式?

.net - 清理代码并进行重构。额外的局部变量

antlr - 记住 AST 中的 ANTLR 规则/节点

hibernate - Jpa vs Hibernate - 标准还是功能?

codeigniter - CodeIgniter DB session 问题:sess_expir

linq-to-sql - Windows 8的Metro风格应用程序中是否可以使用LINQ-to-

hudson - Jenkins jacoco插件