读书人

Hibernate双主键多表联系关系操作相

发布时间: 2012-10-06 17:34:01 作者: rapoo

Hibernate双主键,多表关联操作相关知识
class="com.hb.po.PetinforId">

?


?

? ?? ?? ?? ?<key-property name="itemid" type="java.lang.String">

?


?

? ?? ?? ?? ?? ? <column name="ITEMID" length="10" />

?


?

? ?? ?? ?? ?</key-property>

?


?

? ?? ?? ?? ?<key-property name="pid" type="java.lang.Long">

?


?

? ?? ?? ?? ?? ? <column name="PID" precision="22" scale="0" />

?


?

? ?? ?? ?? ?</key-property>

?


?

? ?? ???</composite-id>

?


?

? ?? ???<many-to-one name="cate" class="com.hb.po.Cate" fetch="select" lazy="false">

?


?

? ?? ?? ?? ?<column name="CATEID" precision="22" scale="0" />

?


? ?? ???</many-to-one>

从配置文件可以看出复合主键的配置方法和多对一映射的配置方法。
在这里要非常注意Hibernate lazy的设置。

?

Hibernate Lazy 问题, Spring 中引入了 OpenSessionInViewInterceptor, 这样虽然解决了页面上的 Lazy Load 问题,却增加了各层之间的偶合性,
如果一个 Lazy 的 Collection 在页面上可以被正确的 load, 但是如果请求不是来自于 HttpServletRequest (比如在 TestCase 或 Service 中希望获取 lazy 的属性),
一般会导致两种错误:

?


?

代码

?


?

1. 设置了 lazy = "true"? ?

?


?

会导致 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of xxx: xxx - no session or session was closed? ?

?


?

2. 设置里 lazy = "false"? ?

?


会导致 org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed? ?

我这里设置的是lazy=“false”方便将Cate Bean中的相关属性用到工程中。
这个就是PO的相关东西,我会继续将po的相关细化并贴出来共享。下面是其他的操作。

<B style="mso-bidi-font-weight: normal">

读书人网 >软件架构设计

热点推荐