使用eclipselink查询可嵌入元素的集合 [英] Querying a collection of embeddable elements using eclipselink

查看:106
本文介绍了使用eclipselink查询可嵌入元素的集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下JPA(2.0.2)实体:

I have the following JPA (2.0.2) entities:

员工

@Entity
@Table(name = "T_EMPLOYEE")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ElementCollection
    @CollectionTable(name = "T_COMPETENCE")
    private Set<Competence> competences;

    // Getter and setters
}

和能力

@Embeddable
public class Competence {
    @JoinColumn(nullable = false)
    @ManyToOne
    private Skill skill;

    // Getter and setters
}

(技能实体不重要,因此被省略,还有各种附加属性.)

(The skill entity shouldn't be important and is therefore omitted, so are various additional attributes.)

我正在使用EclipseLink(2.2.0)通过DAO查询我的实体.现在,我想使用以下查询:

I'm using EclipseLink (2.2.0) to query my entities with a DAO. Now I'd like to use the following query:

public List<Employee> findBySkill(Skill skill) {
    TypedQuery<Employee> query = getCurrentEntityManager().createQuery(
        "SELECT e FROM Employee e JOIN e.competences c WHERE c.skill = :skill", 
        Employee.class);
    query.setParameter("skill", skill);
    return query.getResultList();
}

但是它一直抛出以下异常:

But it keeps throwing the following exception:

Caused by: Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [SELECT e FROM Employee e JOIN e.competences c WHERE c.skill = :skill], line 1, column 54: unknown state or association field [skill] of class [com.kaio.model.Competence].
    at org.eclipse.persistence.exceptions.JPQLException.unknownAttribute(JPQLException.java:457)
    at org.eclipse.persistence.internal.jpa.parsing.DotNode.validate(DotNode.java:88)
    at org.eclipse.persistence.internal.jpa.parsing.Node.validate(Node.java:91)
    at org.eclipse.persistence.internal.jpa.parsing.BinaryOperatorNode.validate(BinaryOperatorNode.java:34)
    at org.eclipse.persistence.internal.jpa.parsing.EqualsNode.validate(EqualsNode.java:41)
    at org.eclipse.persistence.internal.jpa.parsing.WhereNode.validate(WhereNode.java:34)
    at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:207)
    at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:183)
    at org.eclipse.persistence.internal.jpa.parsing.ParseTree.validate(ParseTree.java:173)
    at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateReadQueryInternal(JPQLParseTree.java:110)
    at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:84)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:216)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:187)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:139)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:123)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1376)
    ... 48 more

消息很清楚:在我的课程能力上找不到属性Skill.但是我认为没有任何理由.还是我对自己的问题有错误的处理方式?我应该如何查询可嵌入对象列表?

The message is pretty clear: It can't find the attribute Skill on my class Competence. But in my opinion there is no reason on that. Or do I have a wrong approach on my problem? How should I query in a List of embeddable objects?

感谢您的帮助.

推荐答案

好的,这似乎是一个错误,并且在更高版本的eclipse链接中已解决.我将项目更新为EclipseLink 2.4,问题消失了.

Okay, this seems to be a bug and it has been solved in a later version of eclipse link. I updated the project to EclipseLink 2.4 and the problem disappeared.

这篇关于使用eclipselink查询可嵌入元素的集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆