2016-11-19 5 views
2

JPAを使用してOracle SQLデータベースをクエリしています。 はしかし、私はエラーを取得しています:私は次のクエリを書くときEntityManagerクエリでプロパティを解決できない

String sqlQuery = "SELECT c FROM XD_FILES c WHERE c.CLIENT_ID = :clientId"; 
TypedQuery<File> query = em.createQuery(sqlQuery, File.class); 
query = query.setParameter("clientId", clientId); 
ArrayList<File> clientFiles = (ArrayList<File>) query.getResultList(); 

ファイルは、このコラムを持って

Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: CLIENT_ID of: com.fdmgroup.pojo.File [SELECT c FROM com.fdmgroup.pojo.File c WHERE c.CLIENT_ID = :clientId] 

@ManyToOne(targetEntity = Client.class) 
@JoinColumn(name = "CLIENT_ID") 
private Client client; 

私はわからないよ、なぜ持っているように見えるよう「CLIEND_ID」にリンクされたフィールド「クライアント」。

+0

ようにすべきですか? –

+1

"sqlQuery"はSQLですが、JPQLのAPIを使用しています! –

答えて

1

クエリでは列名ではなくプロパティ名を指定する必要があります。

ので、クエリは次のようになります。

String sqlQuery = "SELECT c FROM XD_FILES c WHERE c.clientId = :clientId"; 
1

あなたのクエリがネイティブクエリを思わずJPQLは、次の2つの方法でこの問題を解決することができます。

1)変更em.createQuery(sqlQuery、File.class); em.createNativeQuery(sqlQuery、File.class);

2)JPQLにネイティブクエリからクエリを変更し、クエリは、列名は何

select c from File c where c.client.clientID=:clientId 
(Assuming clientID is primary key column name in Client class) 
関連する問題