请教hibernate实体设计问题

08-05-31 jnotnull
         

对于信息发布系统来说,肯定要有分类字段,如一条新闻有一级分类和二级分类。
在这里,按照我的设计, 二级分类和一级分类都是一个实体,他们之间是多对一的关系(双向关联)。然后再和一条新闻关联,新闻和第一类别应该是多对一的关系(双向关联)。
请问bang大哥,我这样的设计有没有问题呢。
如果这样设计的话,操作起来感觉非常的麻烦。特别是如果这个类别再和其他实体进行关联,那就需要设立更多的外健。

对于类别这样的实体的建模还向bang您请教。

         

freebox
2008-06-01 15:39

类别再和其它实体关联,没看懂是什么意思。

二级分类和一级分类应该都是实体,并且是同一个实体类的不同对象,是一对多双向自关联关系,news和category是单向多对一关联,双向要lazyload。
[该贴被freebox于2008-06-01 15:40修改过]

jnotnull
2008-06-02 09:03

freebox果然很强。

@类别再和其它实体关联,没看懂是什么意思
--
这里假如加入了另一个实体,也要用到这个分类实体(为了可复用性)。
如果是单向关联得话,也得要在多方设立外键字段。这样在category里就有了两个外键了。这样设计合不合理呢。

@news和category是单向多对一关联
--
如果设立为单向关联得话,这里category肯定是一方,按照我得理解,就是category知道他得news,但是news不知道他得category。这样news就不好得到它得category。不知道我理解得对不对。

我是hibernate初学者,如果不对请指出来。谢谢

jnotnull
2008-06-02 09:14

在使用hibernate中,对于lazy得使用总是显得有点害怕。
例如一个 people 关联到 一个company(为了方便使用lazy,我使用了一对多关系),一个company关联到 由该 company发布得信息,同时该信息还有图片作为单独得实体。这样都用lazy显然关联得太多了。我想问一下得是lazy一般深入到几层,才能对整体的性能有一个比较好的平衡呢。

banq
2008-06-02 10:39

二级分类和一级分类可以用compiste模式实现封装起来,然后只要其中一个分类做代表和新闻发生单向关联就可以,是新闻内部聚合一个分类的方式。可看看Evans DDD看看实体和关联设计方面建议

2Go 1 2 下一页