JPA警告:";没有映射与状态字段路径';t、 进展'&引用;

JPA警告:";没有映射与状态字段路径';t、 进展'&引用;,jpa,eclipselink,jpql,Jpa,Eclipselink,Jpql,我正在使用JPA(EclipseLink 2.4.1)和一个包含命名查询的映射文件。Eclipse在映射文件中向我显示以下警告消息: No mapping is associated with the state field path 't.progress'. 警告类型为JPA问题。我的命名查询.xml-文件中的相应行如下所示: <named-query name="FinishedTasks"> <query><![CDATA[SELECT t FRO

我正在使用JPA(EclipseLink 2.4.1)和一个包含命名查询的映射文件。Eclipse在映射文件中向我显示以下警告消息:

No mapping is associated with the state field path 't.progress'.
警告类型为
JPA问题
。我的
命名查询.xml
-文件中的相应行如下所示:

<named-query name="FinishedTasks">
    <query><![CDATA[SELECT t FROM Task t WHERE t.progress = 100]]></query>
</named-query>
Issue.java
看起来像这样(摘录):

我没有关于使用问题的查询的警告


所以我的问题是,我如何摆脱警告?警告是否有一些我不知道的含义(如前所述,查询运行正常)。

这似乎是错误的

<named-query name="FinishedTasks">
  <query><![CDATA[SELECT t FROM Task t WHERE t.progress = 100]]></query> 
</named-query>
使用JUnit无法解决任何警告问题

package test;

import static org.junit.Assert.assertEquals;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class TaskTest {
    private static EntityManager em;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        em = factory.createEntityManager();

        em.getTransaction().begin();
        Task t = new Task();
        t.setProgress(100);
        em.persist(t);
        em.getTransaction().commit();
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        em.close();
    }

    @Test
    public void test() {
        Query q = em.createNamedQuery("FinishedTasks");
        List<?> list = q.getResultList();

        int expected = 1;
        int actual = list.size();
        assertEquals(actual, expected);
    }
}
封装测试;
导入静态org.junit.Assert.assertEquals;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
导入javax.persistence.Query;
导入org.junit.After;
导入org.junit.AfterClass;
导入org.junit.Before;
导入org.junit.BeforeClass;
导入org.junit.Test;
公共类任务测试{
私有静态实体管理器em;
@课前
public static void setUpBeforeClass()引发异常{
EntityManagerFactory=Persistence.createEntityManagerFactory(“测试”);
em=factory.createEntityManager();
em.getTransaction().begin();
任务t=新任务();
t、 进度(100);
em.t;
em.getTransaction().commit();
}
@下课
public static void tearDownAfterClass()引发异常{
em.close();
}
@试验
公开无效测试(){
Query q=em.createNamedQuery(“FinishedTasks”);
List List=q.getResultList();
int预期为1;
int实际值=list.size();
资产质量(实际、预期);
}
}
我的日志

[电子信息]:2013-05-01 21:57:55.561——服务器会话(1763596)——EclipseLink,版本:Eclipse 持久性服务-2.4.1.v20121003-ad44345[EL信息]:连接:2013-05-01

没有与状态字段路径“t.progress”关联的映射

我相信这完全是由于EclipseJPA详细视图(
orm.xml
editor)的缘故,与EclipseLink和JPA没有任何关系。警告提醒您,命名查询使用的JPA查询路径(
t.progress
)未映射到映射文件中。View/xml编辑器没有分析java类的元数据,因此不知道它是否通过JPA注释映射

i、 e.该工具为您提供了最好的工作,它可能会给您带来技术/范围限制

解决方案:

  • 理解消息的含义,手动确保通过JPA注释解决警告(或者如果确实必须,请将适当的实体映射插入实体映射XML文件),然后继续

:^)

您复制了项目,而不是问题…谢谢,阿尔文。发布我的问题时,这是一个输入错误……我猜这只是一个EclipseIDE问题。如果改用@NamedQuery注释,会发生什么情况?使用@NamedQuery时,我会收到相同的警告。您的某个文件中一定有其他内容导致了此问题。你能发布全部内容而不仅仅是摘录吗?删除CDATA并不能解决问题。无论如何,CDATA不应该有什么区别,因为它只影响XML的解析。
<named-query name="FinishedTasks">
  <query><![CDATA[SELECT t FROM Task t WHERE t.progress = 100]]></query> 
</named-query>
<named-query name="FinishedTasks">
  <query>SELECT t FROM Task t WHERE t.progress = 100</query> 
</named-query>
@Entity
@NamedQuery(name = "FinishedTasks", 
  query = "SELECT t FROM Task t WHERE t.progress = 100")
public class Task extends Issue {
    private Integer progress = 0;

    public Integer getProgress() {
        return progress;
    }

    public void setProgress(final Integer progress) {
        this.progress = progress;
    }
}
package test;

import static org.junit.Assert.assertEquals;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class TaskTest {
    private static EntityManager em;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        em = factory.createEntityManager();

        em.getTransaction().begin();
        Task t = new Task();
        t.setProgress(100);
        em.persist(t);
        em.getTransaction().commit();
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        em.close();
    }

    @Test
    public void test() {
        Query q = em.createNamedQuery("FinishedTasks");
        List<?> list = q.getResultList();

        int expected = 1;
        int actual = list.size();
        assertEquals(actual, expected);
    }
}