`
ispring
  • 浏览: 356710 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

请教:关于Hibernate映射建模的问题?

阅读更多
我现在项目中遇到一个数据设计的问题,即:

我有一个文档类(IncDocument),它基本上是一个公共模块类,会在多个其它的类中作为属性出现。如会议类(Conference),论文类(Paper)等,包含了name, size, label, description, url 等属性。

如:现在在Conference中引用到了该类,即: Set documents = new HashSet();
那这个时候IncDocument和Conference的对应关联关系该怎么处理呢?

是一对多吗(一次会议对应多个会议文档)? 如果是,那在IncDocument数据表中应该有一个Conference_ID之类的外键来对应Conference的ID。那如果这样的话,我在Paper类中也会有类似的定义,是否在IncDocument表中再增加一个Paper_ID之类的外键,如果再有更多其它的类似的类中有定义的话,则会有更多的外键存在,肯定不符合IncDocument类公共的要求,况且考虑到项目的扩展性,现在还不知道会有多少类会引入到IncDocument集合,总不至于扩展一次更改一次数据库结构吧。另外,如果用一对多,外键来连接的话,如果某个IncDocument并没有被任何Conference引用,只是一个Paper的文档引用,那在数据库中该IncDocument表的Conference_ID字段怎么处理?由于外键约束,它必须是一个实际存在的Conference的ID。

是多对多吗?如果是,引入中间表,那在IncDocument类中是否应该出现 Set conferences = new HashSet() 之类的定义,相应的还会有 Set papers = new HashSet() 等等其它的集合定义?但这些集合属性不应该是IncDocument的直接属性,而且定义好之后对于以后的扩展很不利。再说同上一对多关联,现在还不知道会有多少这样的集合属性会引用到IncDocument类。

小弟对Hibernate的关联关系研究得不是很多,不明白在这里应该怎么定义它们之间的关系。不知道在Hibernate里面有没有所谓的单向多对多关联,即:引入中间表,这样IncDocument表中不需要定义外键(不同与一对多)。在Conference等表中设置Set documents = new HashSet();之类的集合属性,但是IncDocument中不需要加入Set conferences = new HashSet() 之类的定义。如果有,映射文件中应该怎么配置呢?

希望各位解决过此类问题的高手们给点意见,或者熟悉Hibernate的兄弟们指点一下,给出一个数据表及类关联的设计方案,谢了!!!!!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics