论坛首页 Java企业应用论坛

对robbin所说Hibernate缺陷的一些不理解

浏览 20027 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-05-29  
程序员杂志上提到过一个叫做COID的技术,用于多态关联应该比较合适,而且适应性很广,因为它本身是数据模式设计的增强而不是ORM的功能。
0 请登录后投票
   发表时间:2007-05-31  
"""
原来RoR的多态关联跟Gavin King polymorphic associations的提法还是有不小差别的,从这个角度来说,hibernate的确不支持多态关联。
"""
ROR 中的所谓多态关联的东西完全是应用层的事情,并非 ORM 需要做的。
0 请登录后投票
   发表时间:2007-05-31  
麻烦各位熟悉ROR的简要介绍下究竟“ROR的多态关联”是什么样子的?毕竟多数人没有深入了解ROR。
0 请登录后投票
   发表时间:2007-06-01  
这里我还是以我习惯的python和django为例子吧,看个意思吧。

比如说,你已经有了 Article 和 Movie 两个model,你突然想给他们都加个评论功能,容易想到的做法是加个 ArticleComment 和 Article 关联,MovieComment 和 Movie 关联,比如这样:
class ArticleComment
    article_id = ForeignKey(Article)
    ...
但这样显然不好扩展。
于是你想到写这么一个通用的 Comment model:
class Comment
    content_type = CharField()
    content_id = IntegerField()

content_type 用来标识不同的 model,content_id 用来标识 model 中具体记录的主键id。
这样针对 Article 和 Movie 两个 model 的评论都可以放在这里面。
获取所有针对 Article 的评论:
Comment.objects.filter(content_type='article')

获取 Article 评论中的某一个:
Comment.objects.filter(content_type='article', content_id=1)

大意就是这样了,当然 rails 的“多态关联”把这个过程自动化了一些。

我最近也碰巧注意到了 rails 的这个东西,这篇文章前面部分简单解释了 rails 这里的 “polymorphic” 与 sqlalchemy 中(也就是 hibernate 中)的 “polymorphic” 的区别。
0 请登录后投票
   发表时间:2007-06-06  
看来我没跑题,和前面说的log例子是同一个问题。
这么说ror里面完美解决了这个?
ROR中,当Article或Movie出现子类,比如CartoonMovie后也能自动化地解决么?
似乎hibernate中是没有手段可以搞定,因为commonts属性在父类里面mapping过了,子类mapping里面没法子对其进行覆盖。。。
0 请登录后投票
   发表时间:2007-06-24  
huangyiiiiii 写道
这里我还是以我习惯的python和django为例子吧,看个意思吧。

比如说,你已经有了 Article 和 Movie 两个model,你突然想给他们都加个评论功能,容易想到的做法是加个 ArticleComment 和 Article 关联,MovieComment 和 Movie 关联,比如这样:
class ArticleComment
    article_id = ForeignKey(Article)
    ...
但这样显然不好扩展。
于是你想到写这么一个通用的 Comment model:
class Comment
    content_type = CharField()
    content_id = IntegerField()

content_type 用来标识不同的 model,content_id 用来标识 model 中具体记录的主键id。
这样针对 Article 和 Movie 两个 model 的评论都可以放在这里面。
获取所有针对 Article 的评论:
Comment.objects.filter(content_type='article')

获取 Article 评论中的某一个:
Comment.objects.filter(content_type='article', content_id=1)

大意就是这样了,当然 rails 的“多态关联”把这个过程自动化了一些。

我最近也碰巧注意到了 rails 的这个东西,这篇文章前面部分简单解释了 rails 这里的 “polymorphic” 与 sqlalchemy 中(也就是 hibernate 中)的 “polymorphic” 的区别。


问个问题
这个例子里的 数据库表中的 content_id字段是否存在外键约束?
0 请登录后投票
   发表时间:2007-06-24  
lix23 写道
huangyiiiiii 写道
这里我还是以我习惯的python和django为例子吧,看个意思吧。

比如说,你已经有了 Article 和 Movie 两个model,你突然想给他们都加个评论功能,容易想到的做法是加个 ArticleComment 和 Article 关联,MovieComment 和 Movie 关联,比如这样:
class ArticleComment
    article_id = ForeignKey(Article)
    ...
但这样显然不好扩展。
于是你想到写这么一个通用的 Comment model:
class Comment
    content_type = CharField()
    content_id = IntegerField()

content_type 用来标识不同的 model,content_id 用来标识 model 中具体记录的主键id。
这样针对 Article 和 Movie 两个 model 的评论都可以放在这里面。
获取所有针对 Article 的评论:
Comment.objects.filter(content_type='article')

获取 Article 评论中的某一个:
Comment.objects.filter(content_type='article', content_id=1)

大意就是这样了,当然 rails 的“多态关联”把这个过程自动化了一些。

我最近也碰巧注意到了 rails 的这个东西,这篇文章前面部分简单解释了 rails 这里的 “polymorphic” 与 sqlalchemy 中(也就是 hibernate 中)的 “polymorphic” 的区别。


问个问题
这个例子里的 数据库表中的 content_id字段是否存在外键约束?


答楼上的,这个方案中,content_id 确实是没有外键约束的,rails使用的应该就是这种方案(这一点还没有仔细考证过)。
不过这篇文章(http://techspot.zzzeek.org/?p=13)中给出了三种实现方案,第二种和第三种都是可以拥有外键约束的。
0 请登录后投票
   发表时间:2007-08-09  
huangyiiiiii 写道
lix23 写道
huangyiiiiii 写道
这里我还是以我习惯的python和django为例子吧,看个意思吧。

比如说,你已经有了 Article 和 Movie 两个model,你突然想给他们都加个评论功能,容易想到的做法是加个 ArticleComment 和 Article 关联,MovieComment 和 Movie 关联,比如这样:
class ArticleComment
    article_id = ForeignKey(Article)
    ...
但这样显然不好扩展。
于是你想到写这么一个通用的 Comment model:
class Comment
    content_type = CharField()
    content_id = IntegerField()

content_type 用来标识不同的 model,content_id 用来标识 model 中具体记录的主键id。
这样针对 Article 和 Movie 两个 model 的评论都可以放在这里面。
获取所有针对 Article 的评论:
Comment.objects.filter(content_type='article')

获取 Article 评论中的某一个:
Comment.objects.filter(content_type='article', content_id=1)

大意就是这样了,当然 rails 的“多态关联”把这个过程自动化了一些。

我最近也碰巧注意到了 rails 的这个东西,这篇文章前面部分简单解释了 rails 这里的 “polymorphic” 与 sqlalchemy 中(也就是 hibernate 中)的 “polymorphic” 的区别。


问个问题
这个例子里的 数据库表中的 content_id字段是否存在外键约束?


答楼上的,这个方案中,content_id 确实是没有外键约束的,rails使用的应该就是这种方案(这一点还没有仔细考证过)。
不过这篇文章(http://techspot.zzzeek.org/?p=13)中给出了三种实现方案,第二种和第三种都是可以拥有外键约束的。


这个就是前面说的hibernate中的any映射。
看来各种实现都差不多,问题就是出现子类后的双向关联,里面可能会有些问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics