【发布时间】:2017-03-02 22:39:32
【问题描述】:
我正在研究springjdbcTemplate,所有的db调用都将通过存储过程完成。在 Oracle 11g 中,我创建了一个用户定义类型,其中包含其他类型作为字段,如下所示。
create or replace type WORKER AS Object (NAME VARCHAR2(30),
age NUMBER);
create or replace type WORKER_LIST IS TABLE OF WORKER;
create or replace type MANAGER AS Object(
NAME VARCHAR2(30),
workers WORKER_LIST
);
在 Java 方面,我创建了如下类。
public class Worker implements SQLData {
private String name;
private int age;
@Override
public String getSQLTypeName() throws SQLException {
return "WORKER";
}
@Override
public void readSQL(SQLInput stream, String typeName) throws SQLException {
setName(stream.readString());
setAge(stream.readInt());
}
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(getName());
stream.writeInt(getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Manager implements SQLData {
private String name;
private List<Worker> workers;
@Override
public String getSQLTypeName() throws SQLException {
return "Manager";
}
@Override
public void readSQL(SQLInput stream, String typeName) throws SQLException {
setName(stream.readString());
setWorkers((List<Worker>) stream.readObject());
}
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(getName());
stream.writeObject((SQLData) getWorkers());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Worker> getWorkers() {
return workers;
}
public void setWorkers(List<Worker> workers) {
this.workers = workers;
}
}
我在 typeMap 中提到过映射。
但我没有得到预期的结果。
Worker 类型以 Struct 形式返回,List<Worker> 以数组形式返回。
请让我知道我应该做什么以及获取我上面提到的预期对象的标准协议是什么。我是 JDBCTemplate 的新手。请提出建议。
谢谢 拉姆
【问题讨论】:
-
将
Manager类中getSQLTypeName()返回的值从"Manager"更改为"MANAGER"是否有帮助? -
这是我的实际代码的副本,但在我的实际代码中,它只是正确的 SQL 类型的名称。
-
您好,您可以分享任何解决此类问题的文章和博客。
标签: spring oracle stored-procedures jdbc types