【发布时间】:2013-02-24 01:03:26
【问题描述】:
这是为相关后端获取指定级别内的模块实体的方法。
public List<Module> getModulesWithinLevel(Long backendId, ModuleLevel... levels) {
String joinedLevels = serializeLevels(levels);
Query query = entityManager.createNativeQuery("SELECT DISTINCT M.* FROM MODULES M JOIN ROUTING_SEQUENCES RS ON RS.BCK_ID = M.MOD_ID WHERE M.MOD_LEVEL IN (?) AND RS.BCK_ID = ?", Module.class);
query.setParameter(1, joinedLevels);
query.setParameter(2, backendId);
List l = query.getResultList();
return l;
}
当我在 sql developer 中执行确切的查询时,我得到一行作为结果。 但是此方法返回空列表。日志中没有错误 - 只是空列表。 我的原生查询有什么问题?
【问题讨论】:
-
我唯一能想到的是,您设置的 2 个参数与您在 sql developer 中运行的查询中输入的参数不同。另一种可能性是由于数据类型的原因,hibernate 或 oracle 正在强制转换某些内容,这会导致查询不返回任何值。您可以发布您在 Java 中看到的参数以及您在 SQL 开发人员中执行的查询吗?还添加映射可能有助于找到问题。
-
我正在设置正确的值 - 我确定。但是您的第二个陈述可能是正确的。当我从本机查询中删除 Module.class 参数时,我得到“JDBC 类型没有方言映射:-9”。快速搜索后我来到link我实现了它,没有抛出异常,但仍然没有返回结果。
标签: oracle hibernate jpa nativequery