JPA警告:";没有映射与状态字段路径';t、 进展'&引用;
我正在使用JPA(EclipseLink 2.4.1)和一个包含命名查询的映射文件。Eclipse在映射文件中向我显示以下警告消息: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
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);
}
}