修改影射文件
<discriminator colnum="object_name" type="string"/>
然后加
<subclass name="***.***.***.EMAIL_ATTACHMENT discriminator-value="Email"/>

解决方案 »

  1.   

    谢谢楼上的,你那种方式好象是定义一对多多态关联
    而我这个
    关系应该是这样的
    Bbs
                Attachment
    Email应该是多对一多态关联吧
      

  2.   

    Bbs和Email是分开的两个表,与Attachment哪里是多对一,应该是你理解错了,不能这么理解的。
    Bbs和Email与Attachment都是一对多,一对多的关联分别建起就是了。
      

  3.   

    因为我的公告和邮件都可以有多个附件
    所以说肯定要用到一对多的关系
    本来我是可以建立多个对应关系
    比如
    Bbs      BbsAttachment
    Email    EmailAttachment每一个类都对应于数据库中的一个表
    但这样就会导致系统中类很多,表也很多
    所以我才想把Attachment合并成一个
    为了在Attachment中区分是Bbs的附件,还是Email的附件
    所以才需要在Attachment里加一个字段object_name
    里面的值是"Bbs"时代表是公告的附件,对应的object_id跟Bbs的id做连接
    里面的值是"Email"时代表是邮件的附件,对应的object_id跟Email的id做连接不知道我这么说大家有没有理解
      

  4.   

    我最开始的初衷是为了减少数据库中的表
    因为其实我系统中需要有附件的地方还有很多而不仅仅是Bbs,Email
    不过刚才我想了想
    如果我合并数据库中的Attachment表而分离系统中的Attachment类可能更好一些
    这样的话就可以保持Bbs,Email与各自的Attachment类各自建立一对多的双向关系不知道大家觉得如何?
      

  5.   

    Bbs -> Attachment  一对多单项关联Email -> Attachment 一对多单项关联
    不知道你是要双向还是单项的?
      

  6.   

    其实大家还是不要被我的想法干扰了也就给我讲讲当出现这种情况时有没有好的解决办法
    Bbs      BbsAttachment               
    Email    EmailAttachment
    Plan     PlanAttachment
    Message  MessageAttachment
    ...当出现这种多个一对多关联,且有相似性的时候
    如何合并数据库中的表Bbs
    Email
    Plan
    Message
             Attachment
      

  7.   

    你可以试试整个方法,
    对你建立的表的配置文件建立两个subclass,也就是让这个表支持两个类,一个是BBS ATTACH,一个是Email ATTACH,具体的方法在hibernate的帮助文件里很详细,这样,你就可以用一个表来实现你要实现的功能了
      

  8.   

    BBS ATTACH和Email ATTACH抽离出公共属性做为父类,采用table per class hierachy策略,也就是表与类的一对多关系,通过discriminator 来区分是哪种附件
      

  9.   

    可以用再mapping文件里面写formula实现。