【问题标题】:playframework use find with IN and a list of modelsplayframework 使用 find 和 IN 和模型列表
【发布时间】:2012-05-13 14:53:28
【问题描述】:

下面的代码有问题,写在 play (1.2.4):

List<MSprache> sprachen = MSprache.find("active = ?", true).fetch();
List<MFieldDscr> textey     = MFieldDscr.find("sprache IN", sprachen).fetch();

如果我执行一个测试这部分代码的测试,则会显示以下错误:

A java.lang.IllegalArgumentException has been caught, org.hibernate.hql.ast.QuerySyntaxException: unexpected token: null near line 1, column 48 [from models.Sprache.MFieldDscr where sprache IN]

我不明白错误在哪里。

【问题讨论】:

    标签: java hibernate playframework playframework-1.x


    【解决方案1】:

    我不太确定您要达到的目标,
    但我认为这就是你想要的:

    String jpql = "FROM MFieldDescr fd WHERE fd.sprache "
                + "IN ( SELECT s FROM MSprache s WHERE s.active = ? ) ";
    List<MFieldDscr> textey = MFieldDescr.find( jpql, true ).fetch();
    

    这将找到所有具有MSprache 且活动集为trueMFieldDescr 实体。


    顺便说一下,用于查询实体的语言是 JPQL,以防您想了解更多信息。

    这里有一些有用的链接:

    【讨论】:

    • 不,这不是我的意思。问题不在于制作这样的 JPQL……我认为可以使用“IN”语法并给出任何类型的列表,并且模型理解我的意思;)
    • 你试过MFieldDscr.find("sprache IN ?", sprachen).fetch();(缺少问号)吗?
    • 是的,我得到了同样的错误 :( 也试图只用模型的 id 来制作它......
    • 奇怪...尝试使用实体管理器创建查询,如下所示:String jpql = "SELECT fd FROM MFieldDescr fd WHERE fd.sprache IN :sprachen"; Query q = em.createQuery(jpql, MFieldDescr.class); q.setParameter("sprachen", sprachen); List&lt;MFieldDescr&gt; result = q.getResultList();
    • hm,用你最后的代码,我得到了我期望的结果......我不明白这个问题。搞得这么“复杂”,不可能是解决办法……
    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多