java - Hibernate:没有定义查询(没有实体类)
问题描述
有一些相关的问题,例如:
但是,它收到错误:没有为该名称定义查询 [getTestFunction],我儿子不知道该尝试什么了。
我的 Oracle 函数
FUNCTION mySchema.MyPackage.getTestFunction(pParam1 VARCHAR2, pParam2 DATE) RETURN SYS_REFCURSOR AS
result SYS_REFCURSOR;
BEGIN
OPEN result FOR
SELECT 123 AS "ID", 'abc' AS "VALUE" FROM DUAL
UNION ALL
SELECT 456 AS "ID", 'def' AS "VALUE" FROM DUAL
UNION ALL
SELECT 789 AS "ID", 'ghi' AS "VALUE" FROM DUAL;
RETURN result;
END getTestFunction;
我的 POJO
public class ResultPOJO {
private String ID;
private String VALUE;
}
我的仓库
@Transactional
@Repository
@SqlResultSetMapping(
name = "testmapping",
classes = {
@ConstructorResult(
targetClass = ResultPOJO.class,
columns = {
@ColumnResult(name = "ID"),
@ColumnResult(name = "VALUE")
}
)
}
)
@NamedNativeQuery(
name = "getTestFunction",
callable = true,
query = "{? = call mySchema.MyPackage.getTestFunction(?,?)}",
resultSetMapping = "testmapping"
)
public class TestDao {
public List<ResultPOJO> getValues(String pParam1, LocalDate pParam2) {
TypedQuery<ResultPOJO> q = entityManager.createNamedQuery("getTestFunction",ResultPOJO.class);
q.setParameter(0, pParam1);
q.setParameter(1, pParam2);
return q.getResultList();
}
}
我错过了什么?
解决方案
JPA 注释仅对实体有效,我也认为对 package-info.java 文件有效,但某些注释只能应用于类,因此您可能需要一种“虚拟实体”。你可以这样定义:
@Entity
@Subselect("select 1 as id from dual")
public class Dual {
@Id
Integer id;
}
然后,您可以@NamedNativeQuery
在该类上定义 。请注意,尽管您需要在 Spring 项目中启用实体扫描,但对于您将放入此类的包。
推荐阅读
- excel - Excel Sumproduct 公式分段工作,但不能一起工作
- java - maven-junit 类测试的 IDEA 社区版本限制
- sql - 在雪花程序中转义特殊字符
- python - 使用 numpy 创建具有任意形状的单位矩阵
- ios - 多选两侧在 iPad 中显示“0 项”| Aurelia 框架下的 iPhone
- ios - 通过可可豆荚安装第三方框架后出现“reachabilityChanged”错误?
- graphql - 我无法在我的设置中读取 frontmatter 字段
- javascript - 与承诺一起返回附加值
- python - 如何读取 python 结构的结果?
- javascript - 我可以将表单标记为与浏览器用户一样有效吗?