shuweiyi
shuweiyi
2011-08-12 01:34
浏览 235
已采纳

关于hibernate中多个OneToMany情况如何设计映射关系

标题说的不够清楚,具体是这样的:

有一个附件表,一个用户表,一个课程表,一个实验表。

一个附件属于某个用户的某个课程的某个实验,但是一个用户可以有多个附件,一个课程也可以有多个附件,一个实验也能有多个附件。

所以就成了:

[code="java"]public class Attachment {

@ManyToOne
   //用户
public User user;
@ManyToOne
   //课程
public Course course;
   //实验
@ManyToOne
public Task task;


[/code]

感觉这样设计初始化时需要同时获得user,course和task。 比较麻烦,这样设计是不是有问题? 更合理的设计是怎样的? 请指教。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • redstarofsleep
    redstarofsleep 2011-08-12 08:36
    已采纳

    我觉得这样设计没有什么问题

    点赞 评论
  • zhanghongcai
    张洪財 2011-08-12 08:37

    多对一,这样设计不感觉有问题。

    点赞 评论
  • zhanghongcai
    张洪財 2011-08-12 08:39

    如果 “一个用户表,一个课程表,一个实验表 ”它们三个的附件没有关系的话,你可以把附件表拆成三个。 这样有助于查询速度。。

    点赞 评论
  • scau1983ljb
    p0程序员 2011-08-12 08:47

    一个附件属于某个用户的某个课程的某个实验。
    我理解的意思是“一个用户可以有多个课程,一个课程也可以有多个实验,一个实验也能有多个附件”,实验和附件应该是聚合或组合关系
    类关系图如下

    User(1) - (*)Course(1) - (*)Task(1) - (*)Attachment

    Attachment应该如下:

    [code="java"]
    public class Attachment {

           //实验  
        @ManyToOne  
        public Task task;  
    }  
    

    [/code]

    @ManyToOne  
       //用户  
    public User user;  
    @ManyToOne  
       //课程  
    public Course course;  
    

    这两个是冗余属性,如果是经常要用到又有性能问题,可以冗余过来(从本例来看,这两个冗余属性应该是不会变化的,如果变化还要考虑数据同步问题)。
    另外,还可以考虑延迟加载嘛

    点赞 评论

相关推荐