hibernate双键关联解决办法
问题:
我的数据库结构是这样的:

首先一开始我可以获得一个频道的channelId,我根据这个channelId得到一个首页区块的List,我在hibernate中配置homepagearea的加载方式,这样就可以通过homepage的到关联的栏目column(多对一关系),然后我还是使用hibernate的自动加载,取到column关联的专题subject(一对多关系)。
这时候问题出来了,由于column到subject的关联没有带channel信息,所以,我取到的subject实际上是一个column下所有的subject,而我期望的是要得到,一个homepagearea下根据channelId和columnId取得的subject.
解决思路:
希望通过hibernate直接建立homepage和subject的1对多关联关系
解决方法
首先我改变原来利用工具生成的hibernate配置文件和entitybean
先列出原来的homepagearea的配置文件
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
table="CS_HOMEPAGE_AREA"
schema="WAPUSER"
lazy="true"
>
name="id"
type="long"
column="ID"
length="22"
>
name="createdBy"
type="long"
column="CREATED_BY"
length="22"
/>
name="createdDate"
type="timestamp"
column="CREATED_DATE"
length="7"
/>
name="isMore"
type="long"
column="IS_MORE"
length="22"
/>
name="name"
type="string"
column="NAME"
length="50"
/>
name="rowCount"
type="long"
column="ROW_COUNT"
length="22"
/>
name="showCount"
type="long"
column="SHOW_COUNT"
length="22"
/>
name="theOrder"
type="long"
column="THE_ORDER"
length="22"
/>
name="updateBy"
type="long"
column="UPDATE_BY"
length="22"
/>
name="updateDate"
type="timestamp"
column="UPDATE_DATE"
length="7"
/>
name="csChannel"
>
name="csColumn"
>
为了让homepagearea和subject形成一种一对多的关系,我增加的一个
outer-join="true">
class="com.easou.wapsearch.channel.entity.CsSubject" />
但是由于hibernate一对多映射的一端必须是主键,而且我这里需要关联的还是2列信息,所以我还必须要修改配置文件的主键设置
并且遮蔽掉原有的channel和column多对一关联关系,否则会报告重复错误
这样hibernate才会在加载homepagearea时自动把subject的关联信息也加载进来了
最后的homepagearea配置文件
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
outer-join="true">
class="com.easou.wapsearch.channel.entity.CsSubject" />
经验总结:
1、本来使用hibernate的加载策略就是为了把一些业务逻辑直接融合在数据库关系当中,但是由于自己逻辑没有考虑清楚造成了加载时信息的丢失(而且我觉得我的表结构有问题,不知有有没有dba给我指点一下问题)。
2、hibernate的一对多关联关系多端是1端是针对主键的,所以不论你是关联的是1列2列还是3列,它们都应该是你的1端的主键或者联合主键(其实一对一,多对一,多对多的原理也是相似的)。
参考资料:hibernate_reference(3.2)
发表评论
- 浏览: 28939 次
- 性别:

- 来自: 金城

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
Spring+hibernate 单元测 ...
也许是我水平太差 不知道说了些什么....
-- by webday -
ajax中文上传编码问题
恩!我这几天也碰到了这个问题!做法也是跟你一样的!在前台的JS中将数据用esca ...
-- by Byron -
mingle使用小记--agile项 ...
最近我们制作了 eTrack项目追踪管理 和mingle类似,也是agile项 ...
-- by harryempire -
项目还是产品——需求之争 ...
项目和产品是有区别的,但不是质的不同,尤其是技术人员。 即使是产品开发团队,也是 ...
-- by catiga -
一个堆积木的算法题,比较 ...
wo~~不知道我理解的对不对似乎是背包问题啊~~你去搜索一下,以前写过这样的程序 ...
-- by lixiao






评论排行榜