分享

hibernate fetch outer-join constrained

 曾今最强 2011-03-22

当fetch=select的时候,我们查询从表数据的时候,首先会根据主表查出主表对象,然后根据主表id生成另一个select语句去查询从表数据,产生1+N的查询效果。

当fetch=join的时候,会根据一条外连接语句同时查询主表和从表数据。

但是fetch只适用于get/load或creteria方式进行的查询

当outer-join=true时,你的lazy属性无论设置为任何值,Collection都会初始加载(one-to-one没有lazy 因此不必考虑^_^)

hibernate中constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外键的那个表)。如果constrained=true,则表明存在外键与关联表对应,并且关联表中肯定存在对应的键与其对应, 另外该选项最关键的是影响save和delete的先后顺序。例如增加的时候,如果constainted=true,则会先增加关联表,然后增加本表。删除的时候反之

one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。

one-to-one的双向关联中,必须设置constrained=true,要不然会有重复数据读,如2个表user,car;在位false时sql如下:select * from user a left outer join car b on a.id=b.id left outer join on user c on a.id=c.id where a.id=?    删除的时候最好删除从表,删除主表会先查询下主表,在联合查询下

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多