========== Java ===================
class Parent {
  private int objId,
  private String name;
  private List chidren;
}
class Child {
  private int objId;
  private String name;
  private Parent parent;
}============== oracle ==============
oracle的object,child被嵌套到parent里面,java 代码中,有一个 Parent object, parent 中有Child 的 list。存储过程是insert parent以及相应的一系列child。应该如何传parent 跟 child到oracle存储过程呢?create  type t_child as object (
    child_name varchar2(100),
);
create  type t_child_lst as table of t_child;create type t_parent as object (
    name varchar2(100),
    title varchar2(10),
    children t_child_lst
);

解决方案 »

  1.   

    你每次都要插入很多parent吗
    如果这样建议楼主建立临时表吧如果一次就一个parent,建议存储过程参数为parentid,chidrenidscreate or replace type   chidrenids   is   table   of   number;另外,个人觉得调用存储过程不适合大批量传递参数,这就失去了用他的意义
      

  2.   

    每次一个parent,parent下面有很多child,我的应用不能分两个参数传,因为,parent下面还有很多别的类型的list,child同样包含其他类型的list,子list还含有别的list。所以,是一颗树,要存整颗树到数据库的不同表里。如果 Parent, Child class里面还含有其它对象,比如creator
    class Parent {
      private int objId,
      private String name;
      private List chidren;
      private User creator;
    }
    class Child {
      private int objId;
      private String name;
      private Parent parent;
      private User creator;
    } create table parent (obj_id Number, name varachar2,creator Number);
    create table child(obj_id Number, name varachar2, parent_obj_id number, creator Number);
      

  3.   

    我觉得这个业务用存储过程复杂话了
    在前台直接insert就OK
    如果用hibernate,那代码就很更少了
    insert的性能是比较好的
    这样大数量的把数据给存储过程不是好的方式如果在存储过程中真有复杂的业务逻辑
    你还是先往临时表插入数据,
    然后在用存储过程走流程要好点
    你把整个数据给存储过程,其实相比下来也相当于插入一张表的消耗了
      

  4.   

    存储过程是insert parent以及相应的一系列child。应该如何传parent 跟 child到oracle存储过程呢? 
    把parent ,child的属性转换为一个字符串,在存储过程里面分割字符串,用游标读取,循环保存