论坛首页 Java企业应用论坛

在级联增加时使用的SQL语句的数目问题

浏览 3981 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-11-18  
我有一个表与其它的两个表是一对一的关系,原来我在做映射关系时没有使用组联关系,所以在插入时(总共1000条记录),我对每个对象都显示地调用了save方法,在运行时,对每个表只显示了一条SQL语句(总共三条SQL语句).

后来,我将他们之间 的级联关系修改为all,目的是使删除主表时可以同时删除从表中的数据,并且可以级联地插入或修改数据,这样我将他们文章的关系设置好后,只在主表对象上调用了save方法,但这时总共显示了3000条SQL语句,我检查了一下插入的结果是对的,但为什么两种做法显示出的SQL语句的数目不同呢?
   发表时间:2003-11-24  
难道没有人知道吗?
0 请登录后投票
   发表时间:2003-11-24  
Session session = openSession();;
        Transaction tx = null;
        try {
            tx = session.beginTransaction();;

            for (int i = 0; i < 10; i++); {
                Cat cat = new Cat();;
                session.save(cat);;
                //session.flush();;
            }

            tx.commit();;
        }
        catch (Exception e); {
            if (tx != null); {
                tx.rollback();;
            }
            throw e;
        }
        finally {
            session.close();;
        }

你可以看看注释掉session.flush();和保留它
这两种情况下打出的sql数目有什么不同。
0 请登录后投票
   发表时间:2003-11-24  
yehs220,谢谢回复!

我知道你的意思,但我说的还不是这样,我在代码中并没有使用flush方法。只是调用了save方法,然后commit。对于相同的代码只是修改了hbm.xml中的级联方式就产生了不同的效果。

我想原因可能是(不知道对不对),由于Hibernate在对数据库操作时会使用Batch进行操作,当没有使用级联时,对于每一个表它会使用一个批进行处理,所以在屏幕上看到的就是一个SQL语句;而当使用级联时,对于每一个主表,在插入时都会同时检查从表中的相关记录,这样对于主表中的每一个记录都会对应一条SQL语句,相应的从表也会在插入主表记录时对就一条,这样主表中有多少条记录的话,就会有多少组相同的SQL语句了(我看了一上SQL语句的信息,对于一对多的情况,在插入时从表的SQL语句还是只有一条)。
0 请登录后投票
   发表时间:2003-11-24  
《论坛提问的智慧》第四条
0 请登录后投票
   发表时间:2003-11-25  
robbin 写道
《论坛提问的智慧》第四条


对不起,我的实际情况太复杂就想先说明一下,应当说的比较明白吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics