EntityManager查询无法解析属性

时间:2016-11-19 00:16:18

标签: java jpa entitymanager joincolumn

我正在使用JPA来查询OracleSQL数据库。 但是,我收到了错误:

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]

当我写下面的查询时

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();

文件有此列

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

我不确定为什么因为它似乎将“客户端”字段链接到“CLIEND_ID”。

2 个答案:

答案 0 :(得分:1)

您需要在查询中提及属性名称,而不是列名。

因此查询应如下所示:

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

答案 1 :(得分:1)

您的查询似乎是本机查询而不是JPQL,您可以通过两种方式解决此问题。

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)