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">