您可以定义多个oracle对象类型。在oracle对象的情况下,它们映射到java.sql.Struct
。在集合的情况下(就像我所了解的那样,引用的表类型)它们映射到java.sql.Array
。只需注册您的输出参数为java.sql.Array
。在较早的预言的情况下,JDBC驱动程序(10G)记得使用完整引用类型(包括模式),否则你可能会喜欢“无效型”或类似的错误:
例子:
stmt.registerOutParameter(4, Types.ARRAY, "SCHEMA.TABLE_TYPE");
stmt.execute();
Array array = stmt.getArray(4);
如果你有很多的这样的代码,你可以从的EclipseLink的方法中获益:
@Transactional(readOnly = true)
public List<Company> getCompanies(String filter) {
EntityManager em = entityManagerProvider.get();
Query query = em.createNamedQuery("Company.getCompanies");
query.setParameter("p_filter", filter);
return query.getResultList();
}
:
@Entity
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name = "Company.getCompanies",
procedureName = "SQL_PACKAGE.GET_COMPANIES",
parameters = {
@StoredProcedureParameter(queryParameter = "p_filter", direction = Direction.IN),
@StoredProcedureParameter(queryParameter = "p_result", direction = Direction.OUT_CURSOR),
},
resultClass = Company.class)
})
public class Company {
@Id
@Column(name = "COMPANY_NO")
private Long companyNo;
@Column(name = "COMPANY_NAME")
private String companyName;
public Long getCompanyNo() {
return companyNo;
}
public String getCompanyName() {
return companyName;
}
}
然后在DAO使用这样的实体
在这种情况下,您不必为输出定义特殊的oracle集合类型,只需在PL/SQL中返回ref cursor
即可。
您正在使用哪个数据库? – 2011-04-07 12:23:02
显示您的代码和错误,否则没有人能够帮助 – 2011-04-07 12:23:15
即时通讯工作与Oracle 11g。 – Annu 2011-04-07 12:33:00