Spring boot 使用spring数据jpa在存储过程中将ref cursor作为输出参数读取会返回null

Spring boot 使用spring数据jpa在存储过程中将ref cursor作为输出参数读取会返回null,spring-boot,jpa,spring-data-jpa,sys-refcursor,Spring Boot,Jpa,Spring Data Jpa,Sys Refcursor,我试图使用SpringDataJPA和SpringBoot读取oracle存储过程中的refcursor,存储过程成功运行,但对返回列表的引用始终为null 我尝试使用Hibernate作为JPA提供者和Eclipse链接,但没有成功,下面是oracle ddl和java代码 Oracle表(我用一些示例数据填充了表) Oracle存储过程 PROCEDURE collect_roles (role_list_o OUT SYS_REFCURSOR) IS ex EXCEPTION; B

我试图使用SpringDataJPA和SpringBoot读取oracle存储过程中的refcursor,存储过程成功运行,但对返回列表的引用始终为null

我尝试使用Hibernate作为JPA提供者和Eclipse链接,但没有成功,下面是oracle ddl和java代码

Oracle表(我用一些示例数据填充了表)

Oracle存储过程

PROCEDURE collect_roles (role_list_o OUT SYS_REFCURSOR) IS
    ex EXCEPTION;
BEGIN
    OPEN role_list_o FOR SELECT id, name FROM role;
END;
xml(oracle jdbc驱动程序依赖项是从本地ojdbc7.jar安装在maven中的)

Role.java

package hello;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedStoredProcedureQueries;
import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.ParameterMode;
import javax.persistence.StoredProcedureParameter;
import javax.persistence.Table;

import org.springframework.data.domain.Sort.Direction;

@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "findRolesViaProcedure",
    procedureName = "wfactura.collect_roles",
    resultClasses = Role.class,
    parameters = {
        @StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "role_list_o", type = Void.class)

    })})
@Entity
public class Role {

    @Id @GeneratedValue//
    @Column(name="ID")
    private Long id;

    @Column(name="NAME")
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
RoleRepository.java

package hello;

import java.io.Serializable;
import java.util.List;

import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.CrudRepository;

interface RoleRepository extends CrudRepository<Role, Serializable> {

    @Procedure(name = "findRolesViaProcedure")
    List<Role> findRolesViaProcedure();

}
包你好;
导入java.io.Serializable;
导入java.util.List;
导入org.springframework.data.jpa.repository.query.Procedure;
导入org.springframework.data.repository.crudepository;
接口角色还原扩展了CRUDEPository{
@程序(name=“findRolesViaProcedure”)
列出findRolesViaProcedure();
}
我用下一行调用存储过程

List<Role> roles = repo.findRolesViaProcedure();
List roles=repo.findRolesViaProcedure();
我修改了在另一个表中插入值的存储过程,我意识到执行是成功的,但是列表角色是空的,即使表中有数据

谁能帮帮我吗

@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "role_list_o", type = Void.class)
应修改为:==>

@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "role_list_o", type = void.class)

对你有用吗?因为我有同样的问题,而这个解决方案并没有解决这个问题,我和你有同样的问题。我不能直接在oracle数据库中调用pakage。我必须创建一个新的过程来调用pakage。对不起,我的英语不好。因为我用翻译。你找到解决办法了吗?
List<Role> roles = repo.findRolesViaProcedure();
@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "role_list_o", type = Void.class)
@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "role_list_o", type = void.class)