web-dev-qa-db-ja.com

JPQL:状態フィールドパスを有効なタイプに解決できません

このクエリを機能させることはできません:

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

そして私はこの例外を得ました:

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]. 

なぜそれが起こるのですか? :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 
7
DeadKennedy

これは、NewsエンティティにNEWSIDという名前の永続属性がないために発生します。永続属性の名前は、JPQLクエリでは大文字と小文字が区別されるため、エンティティに表示されるのとまったく同じ大文字と小文字を使用して記述する必要があります。

エンティティにはnewsIdという名前の永続属性があるため、クエリではNEWSIDの代わりに使用する必要があります。

select c FROM News c WHERE c.newsId = :id
18
Mikko Maunu

エンティティにはnewsId。という名前の永続属性がありますが、クエリではNEWSIDを使用しています。これで試してみてください

select c FROM News c WHERE c.newsId = :id
0
TanvirChowdhury