Java.lang.Object;不能强制转换为<;hibernate实体>;
所以,我对Hibrate和Java一般来说都是新手。我已经看到了一些关于这个错误的帖子,但是没有一个适合我的情况。我有一个简单的JPQL查询,如下所示,它应该从函数表/实体返回函数ID和名称。此查询保存在my FunctionRepository.java中Java.lang.Object;不能强制转换为<;hibernate实体>;,java,hibernate,jpql,Java,Hibernate,Jpql,所以,我对Hibrate和Java一般来说都是新手。我已经看到了一些关于这个错误的帖子,但是没有一个适合我的情况。我有一个简单的JPQL查询,如下所示,它应该从函数表/实体返回函数ID和名称。此查询保存在my FunctionRepository.java中 @Query("SELECT func.functionId, func.functionName" + " FROM Function func") List<Function> findItAll(); ---
@Query("SELECT func.functionId, func.functionName"
+ " FROM Function func")
List<Function> findItAll();
-----below is my FunctionService.java-------
public ArrayNode getAllFunctions() {
ArrayNode json = null;
try {
List<Function> functions = (List<Function>) functionRepository.findItAll();
json = crudEntitiesToJson(functions);
} catch (CorruptDataException cdEx) {
logger.error(cdEx.getMessage());
}
return json;
}
我想我不知道我错在哪里了
提前感谢。您只选择实体的两个字段:
func.functionId, func.functionName
这意味着,查询将返回一个对象数组列表,每个数组包含两个元素,然后尝试将其转换为函数对象列表。那不行。在查询中添加映射步骤或选择整个实体。选择单个列时,您不会得到类型(在您的情况下是函数),而是一个对象数组,如:
Object[]
所以试试:List findItAll()代码>
或者,如果可以获取所有列,您可以像Doleron的回答一样进行操作。更改为
@Query("SELECT func FROM Function func")
List<Function> findItAll();
@Query(“从函数func中选择func”)
List findItAll();
检索所有函数,而不是具有两个属性的数组。它还可以:
@Query("FROM Function")
List<Function> findItAll();
@Query(“来自函数”)
List findItAll();
在JPQL中,SELECT子句定义要从数据库检索的对象类型。您不应该查询字段,而应该像这样查询整个对象:
SELECT func FROM Function func
您可以在上找到更多信息和示例。这很有效!谢谢我接受了这个答案,因为它给出了经过完全修改的代码,但所有的建议/响应都大致相同。
@Query("FROM Function")
List<Function> findItAll();
SELECT func FROM Function func