hibernate3 一对一映射延迟加载失效

例子:新闻索引A表   内容B表,B在数据库中是CLOB类型。根据主从关系,B中建立了外键。下面A、B也指实体类。

hibernate一对一关系映射文件配置就不多写了,大家都知道,直接切入正题:

A的映射配置中有lazy="proxy"设置了延迟加载,但是实际执行并不会延迟加载,hibernate会执行一个JOIN或者另外执行一条获取B的SQL。

从数据库设计来说一对一实体关系模型是根据主从关系在从实体关系中加入另一个关系码,这样只会在B表中建立外键。这样的话实际执行的时候会发现hibernate并没有延迟加载B。

解决办法是在A的映射文件中one-to-one加上constrained="true",也就是给A加上一个外键并且不要设置fetch="join"。但是这样就出来另一个问题,以上面为例,添加新闻的时候要同时写两个表,并且要先写内容表,为了解决问题我取消了内容表里的外键。

 资料来源:http://community.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one

猜你喜欢

转载自cargoj.iteye.com/blog/1140084