您的位置:首页 > 大数据 > 人工智能

hibernate之constrained详解

2015-07-03 10:24 477 查看

hibernate之constrained详解

lazy
(可选 — 默认为
proxy
):默认情况下,单点关联是经过代理的。
lazy="no-proxy"
指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。
lazy="false"
指定此关联总是被预先抓取。注意,如果
constrained="false"
,
不可能使用代理,Hibernate会采取预先抓取。
constrained默认值为false

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


[code]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=?
删除的时候最好删除从表,删除主表会先查询下主表,在联合查询下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: