【问题标题】:Cannot create element join for a collection of non-entities无法为非实体集合创建元素连接
【发布时间】:2013-02-26 13:18:13
【问题描述】:

我正在尝试一个 typedQuery,它给了我以下错误: java.lang.IllegalArgumentException:无法为非实体集合创建元素连接!

我正在使用 JPA 2.0

我的代码:

@Entity
public class Example {
    @ElementCollection(targetClass=ExampleData .class,fetch = FetchType.EAGER)
@MapKeyColumn(name = "locale_key")
@CollectionTable(name = "exampleLocalizedData", joinColumns = @JoinColumn(name = "exampleId"))
     private Map<String, IExampleData> exampleLocalizedData;
}

@Embeddable
public class ExampleData {
     private String data;
     .....
} 

我的查询:

String querySentence = "SELECT DISTINCT e FROM Example e WHERE e.exampleLocalizedData[:locale].name LIKE :filter ";
        TypedQuery<Example > actualQuery = entityManager.createQuery(querySentence, Example .class);

我的问题是,这样做的正确查询是什么?

问候。

编辑:

如果有任何想知道的最终查询:

select DISTINCT e FROM Example e join e.exampleLocalizedData r WHERE index(r) = :locale AND r.name LIKE :filter .

【问题讨论】:

  • 尝试使用显式JOIN:String querySentence = "SELECT DISTINCT e FROM Example e JOIN e.exampleLocalizedData eld WHERE eld[:locale].name LIKE :filter "; TypedQuery&lt;Example &gt; actualQuery = entityManager.createQuery(querySentence, Example .class);
  • 这给了我一个 java.lang.UnsupportedOperationException
  • 另一张照片(其他省略):FROM Example e JOIN e.exampleLocalizedData[:locale] eld WHERE eld.name LIKE :filter
  • n1ckolas: 这给出了 org.hibernate.hql.ast.QuerySyntaxException: 意外令牌:使用 [:locale]
  • 对不起之前的猜测,我认为原因是在 JOIN 结构中。不过,我发现了一些可能对你有用的东西stackoverflow.com/a/9311242/655756

标签: java hibernate jpa hql


【解决方案1】:

问题在于尝试将映射值字段用作普通实体。

为此,您需要使用 JPA 2 KEY()VALUE() 函数。

您可以在这里找到更多信息:https://stackoverflow.com/a/9311242/655756

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2019-12-05
    • 2017-04-04
    相关资源
    最近更新 更多