关于hibernet一对多关联的问题

伍子V5 2006-09-13 08:39:51
有两个类Bbs,Email都需要有附件Attachment
通常情况下可以建立四个表
BBS,BBS_ATTACHMENT,EMAIL,EMAIL_ATTACHMENT

这样就很容易建立各自一对多的双向关系

但现在我想把附件表合为一个ATTACHMENT
结构为
id
object_id
attachment
attachment_file
object_name

如果我要查BBS的附件
可以用
select * from ATTACHMENT where object_id='1' and object_name='Bbs'

如果我要查EMAIL的附件
可以用
select * from ATTACHMENT where object_id='1' and object_name='Email'

这样,我就怎么建立关联关系了
...全文
374 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
idilent 2006-09-19
  • 打赏
  • 举报
回复
可以用再mapping文件里面写formula实现。
killme2008 2006-09-19
  • 打赏
  • 举报
回复
BBS ATTACH和Email ATTACH抽离出公共属性做为父类,采用table per class hierachy策略,也就是表与类的一对多关系,通过discriminator 来区分是哪种附件

SDU_Lynn 2006-09-18
  • 打赏
  • 举报
回复
你可以试试整个方法,
对你建立的表的配置文件建立两个subclass,也就是让这个表支持两个类,一个是BBS ATTACH,一个是Email ATTACH,具体的方法在hibernate的帮助文件里很详细,这样,你就可以用一个表来实现你要实现的功能了
gongzhy 2006-09-15
  • 打赏
  • 举报
回复
支持一下
伍子V5 2006-09-15
  • 打赏
  • 举报
回复
其实大家还是不要被我的想法干扰了

也就给我讲讲当出现这种情况时有没有好的解决办法


Bbs BbsAttachment
Email EmailAttachment
Plan PlanAttachment
Message MessageAttachment
...

当出现这种多个一对多关联,且有相似性的时候
如何合并数据库中的表

Bbs
Email
Plan
Message
Attachment


gh_xiong555 2006-09-15
  • 打赏
  • 举报
回复
不懂,凑个热闹
jiashengfan 2006-09-14
  • 打赏
  • 举报
回复
Bbs -> Attachment 一对多单项关联

Email -> Attachment 一对多单项关联


不知道你是要双向还是单项的?
tcmis 2006-09-14
  • 打赏
  • 举报
回复
学习。
伍子V5 2006-09-14
  • 打赏
  • 举报
回复
一对多双向关联
伍子V5 2006-09-13
  • 打赏
  • 举报
回复
谢谢

楼上的,你那种方式好象是定义一对多多态关联
而我这个
关系应该是这样的
Bbs
Attachment
Email

应该是多对一多态关联吧
zqpsswh 2006-09-13
  • 打赏
  • 举报
回复
修改影射文件
<discriminator colnum="object_name" type="string"/>
然后加
<subclass name="***.***.***.EMAIL_ATTACHMENT discriminator-value="Email"/>
cuiyingfeng 2006-09-13
  • 打赏
  • 举报
回复
?不太明白
伍子V5 2006-09-13
  • 打赏
  • 举报
回复
我最开始的初衷是为了减少数据库中的表
因为其实我系统中需要有附件的地方还有很多而不仅仅是Bbs,Email
不过刚才我想了想
如果我合并数据库中的Attachment表而分离系统中的Attachment类可能更好一些
这样的话就可以保持Bbs,Email与各自的Attachment类各自建立一对多的双向关系

不知道大家觉得如何?
伍子V5 2006-09-13
  • 打赏
  • 举报
回复
因为我的公告和邮件都可以有多个附件
所以说肯定要用到一对多的关系
本来我是可以建立多个对应关系
比如
Bbs BbsAttachment
Email EmailAttachment

每一个类都对应于数据库中的一个表
但这样就会导致系统中类很多,表也很多
所以我才想把Attachment合并成一个
为了在Attachment中区分是Bbs的附件,还是Email的附件
所以才需要在Attachment里加一个字段object_name
里面的值是"Bbs"时代表是公告的附件,对应的object_id跟Bbs的id做连接
里面的值是"Email"时代表是邮件的附件,对应的object_id跟Email的id做连接

不知道我这么说大家有没有理解
lovest317 2006-09-13
  • 打赏
  • 举报
回复
为什么要用一对多咯 一对一才是最安全的啊
mr_liyf 2006-09-13
  • 打赏
  • 举报
回复
Bbs和Email是分开的两个表,与Attachment哪里是多对一,应该是你理解错了,不能这么理解的。
Bbs和Email与Attachment都是一对多,一对多的关联分别建起就是了。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧