JPQL:无法将状态字段路径解析为有效类型

Dea*_*edy 7 jpql

我不能使这个查询工作:

Query query = eManager.createQuery("select c FROM News c WHERE c.NEWSID = :id",News.class);
        return (News)query.setParameter("id", newsId).getSingleResult();
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外:

Exception Description: Problem compiling [select c FROM News c WHERE c.NEWSID = :id]. 
[27, 35] The state field path 'c.NEWSID' cannot be resolved to a valid type.] with root cause
Local Exception Stack: 
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [select c FROM News c WHERE c.NEWSID = :id]. 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?:id和命名参数是相同的

编辑: 我的实体类

@Entity
@Table(name="NEWS")
public class News implements Serializable{

    @Id 
    @SequenceGenerator(name = "news_seq_gen", sequenceName = "news_seq")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "news_seq_gen")
    private int newsId;
    private String newsTitle;
    private String newsBrief;
    private String newsContent;
    private Date newsDate;
    @Transient
    private boolean selected=false;

//constructor and getters and setters 
Run Code Online (Sandbox Code Playgroud)

Mik*_*unu 18

这是因为News实体没有名为的持久属性NEWSID.持久属性的名称在JPQL查询中区分大小写,并且应该使用与它们在实体中出现的完全相同的大小写来编写.

因为实体具有名为的持久属性newsId,所以也应该在查询中使用而不是NEWSID:

select c FROM News c WHERE c.newsId = :id
Run Code Online (Sandbox Code Playgroud)