浏览 3062 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-11
Hibernate: select property0_.user_id as user1_5_0_, property0_.posts as pos _, property0_.replies as replies5_0_, property0_.credits as credits5_0_, pr y0_.glod as glod5_0_ from properties property0_ where property0_.user_id=? User.hbm.xml配置如下: <class name="com.company.model.User" table="users" lazy="true" > ... <one-to-one name="property" class="com.company.model.Property" outer-join="auto" cascade="all" lazy="proxy" /> </class> Property.hbm.xml配置如下: <class name="com.company.model.Property" table="properties" lazy="true" > <id name="userId" type="java.lang.Integer" column="user_id" > <generator class="foreign" > <param name="property">user</param> </generator> </id> ... <one-to-one name="user" class="com.company.model.User" outer-join="auto" constrained="true" lazy="proxy" /> </class> Hibernate版本是3,请教各位,如何配置才能让这个one-to-one成功lazy?即调用UserDao.loadAll()时不执行任何取得Property的sql? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-11
参阅了一下Hibernate自己的FAQ:http://www.hibernate.org/117.html#A17
你的设置基本和例子里面的一样,不过可能是因为采用了主键关联同时又指定了cascade="all",所以使得Hibernate在没有发生读取User关联的Property对象的动作时就向数据库产生了请求…… 也许在one-to-one里面指定fetch="join"可以缓解这个状况(默认的是抓取方式是select),同时在相关的Class属性里面配置batch-size也可以减少数据库的压力。 注:batch-size一般可以指定为2的倍数(如8,16,32),大小最好不要超过JDBC里面设定的batch size。 |
|
返回顶楼 | |
发表时间:2007-01-11
Thanks,按照您的方法,的确变成1条sql了,如下
Hibernate: select this_.id as id7_1_, this_.account as account7_1_, this_.passwo rd as password7_1_, this_.name as name7_1_, this_.gender as gender7_1_, this_.bi rthday as birthday7_1_, this_.email as email7_1_, this_.create_time as create8_7 _1_, property2_.user_id as user1_5_0_, property2_.posts as posts5_0_, property2_ .replies as replies5_0_, property2_.credits as credits5_0_, property2_.glod as g lod5_0_ from users this_ left outer join properties property2_ on this_.id=prope rty2_.user_id 再请教,如果是cascade=all则必不能lazy吗?从设计上看,one-to-one基本都是cascade=all吧。。。 |
|
返回顶楼 | |