JPA调用oracle存储函数

博客主要介绍JPA调用Oracle存储函数,包含带有返回值的简单Oracle函数处理。同时指出可能出现的问题,如索引中丢失IN或OUT参数,是因参数值不统一或Java获取参数值为NULL导致;若项目是多数据源,需指定entityManager数据源,还给出参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JPA调用oracle存储函数

Oracle stored procedures

带有返回值 简单的Oracle函数

Oracle函数

CREATE OR REPLACE **PROCEDURE** count_comments (  
   postId IN NUMBER,  
   commentCount OUT NUMBER )  
AS 
BEGIN 
    SELECT COUNT(*) INTO commentCount  
    FROM post_comment  
    WHERE post_id = postId; 
END;

JPA处理

 StoredProcedureQuery query = entityManager
.createStoredProcedureQuery("count_comments")
.registerStoredProcedureParameter(1, Long.class, 
    ParameterMode.IN)
.registerStoredProcedureParameter(2, Long.class, 
    ParameterMode.OUT)
.setParameter(1, 1L);

query.execute();

Long commentCount = (Long) query.getOutputParameterValue(2);

注意:

1。索引中丢失 IN 或 OUT 参数

此错误是由于Oracle函数的参数值与JPA中给的不统一

还有 java中获取参数的值为NULL的情况,均可导致,需注意!!!

2.entityManager 数据源

若项目中是多数据源 ,需要添加以下标识:

 @PersistenceContext(unitName = "yourOtherEntityManagerFactory")
private EntityManager entityManager;

指定数据源

Oracle functions

Oracle function 简单小例子

Oracle

CREATE OR REPLACE FUNCTION fn_count_comments ( 
    postId IN NUMBER ) 
    RETURN NUMBER 
IS
    commentCount NUMBER; 
BEGIN
    SELECT COUNT(*) INTO commentCount 
    FROM post_comment 
    WHERE post_id = postId; 
    RETURN( commentCount ); 
END;

JPA

BigDecimal commentCount = (BigDecimal) entityManager
.createNativeQuery(
    "SELECT fn_count_comments(:postId) FROM DUAL"
)
.setParameter("postId", 1L)
.getSingleResult();

具体可参考链接

https://vladmihalcea.com/how-to-call-oracle-stored-procedures-and-functions-from-hibernate/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值