Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从plsql中的存储过程获取java代码中的结果集_Java_Oracle_Jpa_Stored Procedures_Plsql - Fatal编程技术网

如何从plsql中的存储过程获取java代码中的结果集

如何从plsql中的存储过程获取java代码中的结果集,java,oracle,jpa,stored-procedures,plsql,Java,Oracle,Jpa,Stored Procedures,Plsql,我正在使用MVC模式 我有两张表:雇员和地址 说, 员工就像 ------------------- Id | Name | DeptId ------------------- 101 | Jake | 501 102 | Donald | 502 我有一张部门的桌子,像 ----------------------------- DeptId | Name | Description ----------------------------- 501 | IT |

我正在使用MVC模式 我有两张表:雇员和地址

说, 员工就像

-------------------
Id  | Name   | DeptId
-------------------
101 | Jake   | 501  
102 | Donald | 502
我有一张部门的桌子,像

-----------------------------
DeptId | Name | Description
-----------------------------
501    | IT   | software assistance  
502    | HR   | Human resources
现在,因为我使用的是MVC,所以这些表映射到类 像

和其他类部门(映射到部门表)

请注意,Employee类引用了Department类的对象。 此@ManyToOne和@JoinColumn注释帮助我们自动检索相应的部门对象和员工对象

直接在代码中查询很容易 但是,如果我在代码中只使用过程或函数,怎么能做到这一点呢 我尝试过不同的方法,但似乎没有帮助

有时我会犯类似这样的错误
无法从oracle 10g中的存储过程返回结果集

谁能澄清一下吗。我还必须使用JNDI

我是否可以从过程/函数中获取结果,使其返回我的
列表
(不是我自己必须整理成对象的原始结果集)。应该可以使用hibernate no?

谢谢

我正在编写伪代码(不是工作示例)。但它应该可以解决您的问题

Oracle

CREATE OR REPLACE PROCEDURE getEmployees(deptName varchar(20))
BEGIN
   SELECT * FROM Employee where DeptId in ( select DeptId from Department where Name =deptName );

END;
/
Query query = session.createSQLQuery(
    "CALL GetStocks(:getEmployees)")
    .addEntity(Employee.class)
    .setParameter("deptName", "Production");

List result = query.list();
for(int i=0; i<result.size(); i++){
    Employee emp = (Employee)result.get(i);
    System.out.println(emp.toString());
}
休眠

CREATE OR REPLACE PROCEDURE getEmployees(deptName varchar(20))
BEGIN
   SELECT * FROM Employee where DeptId in ( select DeptId from Department where Name =deptName );

END;
/
Query query = session.createSQLQuery(
    "CALL GetStocks(:getEmployees)")
    .addEntity(Employee.class)
    .setParameter("deptName", "Production");

List result = query.list();
for(int i=0; i<result.size(); i++){
    Employee emp = (Employee)result.get(i);
    System.out.println(emp.toString());
}
Query Query=session.createSQLQuery(
“调用GetStocks(:getEmployees)”)
.附录(员工类别)
.setParameter(“部门名称”、“生产”);
列表结果=query.List();

对于(inti=0;i您的PLSQL需要返回一个


JPA 2.1支持将CallableStatement out游标映射到实体。请参见此图。

对不起!我需要选择员工,而不是部门!每个员工都映射到一个部门,因为deptId列。我希望在员工的“dept”字段中对应部门的对象。如果在java代码中使用查询,这很简单,但不是那么容易如果是程序,我想修改了伪代码。你需要尝试一下