对象A 一对多 对象B
对象A 一对多 对象C
对象A 一对多 对象D
对象B 一对多 对象E
对象B 一对多 对象F
对象B 一对多 对象G
对象B 一对多 对象H
每个对象对应一张表,每张表有一个DAO
SAVE 方法传值是SAVE (B b ,String aId),SAVE (C c ,String aId)....
这样的情况如果我在一张页面上填写所有信息保存A,B,C,D,E,F,G这么多表,用SAVE方法,需要10几条语句,每保存一个对象需要查询“一”然后SET进去,然后保存。我用的是HIBERNATE我想请教的是有没有其他的解决方案,或者对HIBERNATE进行优化?

解决方案 »

  1.   

    我现在把关系简单一点了
    对象A 一对多 对象B
    对象A 一对多 对象C
    对象A 一对多 对象D
    对象A一对多 对象E
    对象A 一对多 对象F
    对象A一对多 对象G
    对象A一对多 对象H是不是用HIBERNATE,每次 SAVE B 都必须 把对象A load?
      

  2.   

    把关联全删了。我一般不建议在数据库建立外键关联,也不建议在 ORM 中建立关联,全部手工控制。像 ORM 中那些所谓的 cascade update, cascade delete 等仅仅是看上去很美,除了能少写几行代码之外,没有任何优势,而且有些东级联的东西也很模糊,说不定还弄巧成拙,因此也不建议使用。数据表与表之间独立,需要关联仅有一个字段记录为另一关联表的 ID 就可以了。使用 ORM 时,并不是说表之间存在关系,就得建立关联的。
      

  3.   


         你说的很透彻,那这样是不是也不用hibernate 了,基本上都是自己手动写SQL语句是么?
    比如 user:
        private String id;
        private String username;
        private String password;
        private String personId;
        person:
        private String id;
        private String name;
        private String sex;
        private String userId;save 的话就是 save(user ,personId);是这个意思么?还是再建一张关联表,这样的话,其实也是跟外键差不多吧,还是我理解有问题,可否给一个例子呢?