无法从 Spring Boot 和 Spring Data JPA 中的存储过程调用获取多个结果

问题描述 投票:0回答:1

我在使用 Spring Data JPA 从存储过程中获取多个结果集时遇到问题。我有一个返回两个结果集的存储过程:一个用于

Employees
,另一个用于
Departments
。但是,我无法正确获取这些结果集。这是我到目前为止所做的:

1.存储过程

这是我的存储过程的 SQL 代码:

DELIMITER //

CREATE PROCEDURE SearchEmployees()
BEGIN
    SELECT * FROM Employees;
    SELECT * FROM Departments;
END //

DELIMITER ;

2.实体类

员工实体:

@Entity
@Table(name = "Employees")
@Setter
@Getter
@NamedStoredProcedureQuery(
        name = "EmployeeDeptProc",
        procedureName = "SearchEmployees",
        resultClasses = {
                Employee.class, Department.class
        }
)
public class Employee {

    @Id
    private Integer EmployeeID;
    private String FirstName;
    private String LastName;

    @ManyToOne
    @JoinColumn(name = "DepartmentID")
    private Department DepartmentID;
    private String Position;
    private LocalDate HireDate;
    private BigDecimal Salary;
}

部门实体:

@Entity
@Table(name = "Departments")
@Setter
@Getter
public class Department {

    @Id
    private Integer DepartmentID;
    private String DepartmentName;
}

3.存储库

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
    @Procedure(procedureName = "SearchEmployees")
    List<Object> getEmployees();
}

4.控制器

public List<Object> getEmployeeData() {
    return employeeRepository.getEmployees();
}

问题

当我从控制器调用

getEmployeeData()
方法时,我只获得第一个结果集 (
Employees
)。我无法检索第二个结果集 (
Departments
)。

我检查过的事情:

  1. 我在

    application.properties
    中指定物理命名策略为:

    spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    
  2. 我已验证存储过程在数据库中是否正确定义。 我发现了许多最新的技术,只能获得一个结果集,但不能获得许多不同的结果集。如果我使用实体管理器,我也无法获取多个结果集。 任何帮助或指导将不胜感激!

  3. 如何使用 Spring Data JPA 从存储过程中正确获取多个结果集?

  4. 有更好的方法来处理这种情况吗?

通过使用最新的 JPA 技术。您能否请您了解最新的 Spring Boot 中用于实时项目的一些技术。

java spring-boot spring-data-jpa
1个回答
0
投票

Hibernate 中无法访问第二次选择的结果。

© www.soinside.com 2019 - 2024. All rights reserved.