我正在使用MVC模式 我有两个表:员工和地址
说, 员工就像
-------------------
Id | Name | DeptId
-------------------
101 | Jake | 501
102 | Donald | 502
我有一个像
这样的部门表-----------------------------
DeptId | Name | Description
-----------------------------
501 | IT | software assistance
502 | HR | Human resources
现在因为我使用MVC,这些表被映射到类 喜欢
@Table(name="Employee")
Class Employee{
@Id
@Column(name="Id")
private Long id;
@Column(name="Name")
private String name;
@Column(name="DeptId")
private Long deptId;
@ManyToOne
@JoinColumn(name="DeptId", referencedColumnName="id", insertable=false,updatable=false)
private Department dept;
//getters and setters go here
}
和其他类部门(映射到部门表)
@Table(name="Department")
Class Department{
@Id
@Column(name="Id")
private Long id;
@Column(name="Name")
private String name;
@Column(name="Description")
private String description;
//getters and setters go here
}
请注意,Employee类引用了Department类的对象。 这个@ManyToOne和@JoinColumn注释帮助我们自动检索相应的部门对象以及员工对象
直接在代码中查询很容易 但是如果我只在我的代码中使用过程或函数,怎么能这样做呢 我尝试了不同的方法,但它似乎没有帮助
有时我会得到类似的错误
Cannot return resultset from a stored procedure in oracle 10g
任何人都可以澄清一下。我还必须使用JNDI
我能否以一种方式从程序/函数中获取我的结果List<Employee>
(不是我自己必须整理成对象的原始结果集)。应该可以使用hibernate no?
谢谢
答案 0 :(得分:1)
您的PLSQL需要返回ref cursor。
JPA 2.1支持将CallableStatement游标映射到实体。请参阅此answer。
答案 1 :(得分:-1)
我正在编写伪代码(不是工作示例。)但它应该可以解决您的问题。
<强>的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());
}