用多表实现ORM的类继承,怎样确定具体类

xuejie09242 2009-11-25 04:04:00
一个节目单列表,每个节目条目不同类型,所以建立了多个表实现,一个父类表,多个子类表,节目单与条目表(父类表)建立外键连接,问题:在得到节目单列表时,如何创建合适的子类对象?
因为子类数目属性差别可能很大,有可能还在新建不同的条目。
...全文
102 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuejie09242 2009-11-26
  • 打赏
  • 举报
回复
呵呵,谢谢!
hbwhwang 2009-11-25
  • 打赏
  • 举报
回复
跟我理解的意思差不多
我以前也做过类似的设计,一个登记主表,根据主表里面的一个字段判别使用哪种类型的附表。
没有什么好的解决办法,跟你目前使用的方法没有什么区别。增加一种附表,就得改程序加一个case。
建议你看看ibatis3,里面提供了一种相对比较优雅的解决方案,可以把这种变化放到xml文件中。
xuejie09242 2009-11-25
  • 打赏
  • 举报
回复
问题是这样的:
  大体是做一个屏幕控制和发送的程序。有多个显示屏,类似火车站外面LED显示屏,要做成节目单的形式,控制其显示内容。插入内容可能是标语,口号,广告,或者天气预报,节日,倒计时,还有从数据库实时查询出来的数据,按预先设置好的顺序显示,要求客户端控制这些节目单的生成,和条目信息按照相应接口通过UDP协议发送,并在客户端模拟显示,动态更新其状态。
发送的内容可能有两种形式,一是发送文字,有多种字体可选,16点阵和24点阵字体。可以以点阵形式发送,控制屏幕上每一点的亮暗。其中实时查询的数据是每20s要更新一次,查询的内容可能要显示多屏。

现在的想法是,根据条目的不同,分成不同的类,但每一种做为节目单上的一个条目。有些条目是固定的,如标语口号等,可以预先设置要发送的数据内容,而有些如日期,有其固定的算法,默认取当前日期,可能显示年月日时分秒,或星期几等。实时数据显示要存储其查询要求,在显示的时候,根据定义取得相应的数据,并将其分隔成多屏。
另外,每一个条目还可能是按发送固定次数,固定的时间段显示,或每天内只是固定时间段显示。

目前的划分是,将每一个节目单条目作为一个类,同时有个辅助类确定其是否符合显示条件。条目类中包含一个显示条目类,作为各种显示条目的父类。根据内容的不同,这个条目可能是标语口号等固定内容类,也可能是日期,节日等动态内容,也可能是实时数据。

类和数据库设计中,如何根据一个显示条目的ID,确定实例化哪个具体的显示条目类。
不知道我说明白了没有,呵呵。
================================
谢谢!
xuejie09242 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hbwhwang 的回复:]
楼主的意思我是看明白了,但问题不是很明白。
主表里面加一个字段,区分类型。
得到主表记录后,根据这个字段的值,来决定取哪个子表、创建哪种子类对象。
就是工厂模式。
没有什么好的办法。
如果你用ibatis3做为ORM,它里面有一个功能支持一个主表对多个子表。
[/Quote]

ibatis3我没用过,现在这种方式在插入的时候没问题,一次插入几个表就行了。但在查询一个节目单的时候,得到一个条目ID,要知道具体是哪种条目还有些费事,具体在创建的时候,只能根据type类型,用个case,然后根据不同的值,再到不同的表中实例成不同的类。这感觉总有点不太自然,如果多个子类,就要 多一个case。
songqingpeng2009 2009-11-25
  • 打赏
  • 举报
回复
一个类别表 所有类别都用这张表;一个节目单表
class Type {
Type type;
set<Type>
set<Jiemu>
}
class Jiemu{

Type type
}
songqingpeng2009 2009-11-25
  • 打赏
  • 举报
回复
自连接表
hbwhwang 2009-11-25
  • 打赏
  • 举报
回复
楼主的意思我是看明白了,但问题不是很明白。
主表里面加一个字段,区分类型。
得到主表记录后,根据这个字段的值,来决定取哪个子表、创建哪种子类对象。
就是工厂模式。
没有什么好的办法。
如果你用ibatis3做为ORM,它里面有一个功能支持一个主表对多个子表。
zl3450341 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 crazylaa 的回复:]
引用 2 楼 warison2008 的回复:
子类表(子类id,子类代码,子类名称,父类id,子类的父(pid))


同意,一课树就搞定了。子类下还想建多少个子类都可以。为了方便查询,可以在子类里面加上 子类的父id的路径 字段。
[/Quote]

这种可以
zl3450341 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kqwwee 的回复:]
弄棵树,建那么多表干什么啊。一张表啊(id,名字,引用本表id,)不就得了
[/Quote]

!!!一张表
kqwwee 2009-11-25
  • 打赏
  • 举报
回复
弄棵树,建那么多表干什么啊。一张表啊(id,名字,引用本表id,)不就得了
crazylaa 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 warison2008 的回复:]
子类表(子类id,子类代码,子类名称,父类id,子类的父(pid))
[/Quote]

同意,一课树就搞定了。子类下还想建多少个子类都可以。为了方便查询,可以在子类里面加上 子类的父id的路径 字段。
道光2008 2009-11-25
  • 打赏
  • 举报
回复
子类表(子类id,子类代码,子类名称,父类id,子类的父(pid))
道光2008 2009-11-25
  • 打赏
  • 举报
回复
一个父类表,多个子类表?没必要
两个表即可
父类表(父类id,父类名称)
子类表(子类id,子类名称,父类id,子类的父(pid))

67,513

社区成员

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

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