iteye_19590
iteye_19590
2009-07-15 10:32
浏览 240
已采纳

Hibernate 关于多个one-to-many的问题

   1.  类别表被三个业务表作为外键,而这三个业务对象实际使用时只是其中的一个对象被实例化。

   2. 类别表的映射文件通过设置3个 set  one-to-many 分别关联至三个不同业务对象。

   3. 类别对象定义了3个HashSet集合分别对应3个不同的业务对象。

     private Set<Lan> lantype=new HashSet<Lan>(0);  
    private Set<Idc> lantype=new HashSet<Idc>(0);  
     private Set<Hosts> lantype=new HashSet<Hosts>(0);  

   4. 写类别对象的构造函数是就有个问题:

    如果同时写三个构造函数,会报错函数重复:
   public cate(int id, String name, Set<lan> type)
   public cate(int id, String name, Set<IDC> type)
    public cate(int id, String name, Set<Host> type)

    所以只能写一个构造函数了 
    public cate(int id, String name, Set  type)
    问题是如何知道实例化那个业务对象集合

[b]问题补充:[/b]

  1. [code="java"][b][color=darkblue]lovewhzlq[/color] [/b][/code]说的第一个问题: 3个业务表相互独立,是平行关系: 一条类别记录只对应3者之一,也就是与其他两个业务无关了
  2. [code="java"][b][color=darkblue]lovewhzlq[/color] [/b][/code]说的第二个问题:

    “可以改成只要一个one-to-many就解决了”,可否给个示范;

    1. 我个人觉得二楼的答案可行,问题是具体怎么用instanof进行判断 。 [b]问题补充:[/b]
    2. 一楼说的第一个问题,补充如下: 3个业务表相互独立,是平行关系: 一条类别记录只对应3者之一,也就是与其他两个业务无关了。
    3. 一楼说的第二个问题(改成只要一个one-to-many), 能否给个具体的……
    4. 我觉的二楼的方法可行,但instanof判断没用过, 能给个具体的过程吗。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • iteye_5200
    iteye_5200 2009-07-15 14:04
    已采纳

    [code="java"]import java.util.HashSet;
    import java.util.Set;
    public class Test {
    public static void main(String[] args) {
    Set set = new HashSet();
    set.add("123");
    if(set.iterator().next() instanceof String){
    System.out.println("String");
    }
    }
    }[/code]
    这是我写的一个参考例子

    点赞 评论
  • wanghaolovezlq
    wanghaolovezlq 2009-07-15 10:43

    三个业务表没点关系吗,不然怎么会三个业务对象实际使用时只是其中的一个对象被实例化??

    如果可以使用一个超父类,这三个业务类继承它,

    那就可以使用hibernate支持的每个子类一张表的映射情况

    类别表的映射文件通过设置3个 set one-to-many 分别关联至三个不同业务对象!!
    也可以改成只要一个one-to-many就解决了

    我觉得你的数据库和业务模型设计的有些问题了,太冗余了吧

    点赞 评论
  • iteye_5200
    iteye_5200 2009-07-15 10:44

    在构造方法里面取Set type集合里面的对象instanof判断一下对象类型,然后就可以了

    点赞 评论
  • liyistudio
    liyistudio 2009-07-15 11:06

    [color=red]public cate(int id, String name, Set type)
    public cate(int id, String name, Set type)
    public cate(int id, String name, Set type) [/color]
    看上去是不同,但是你想到泛型具有对象擦除问题,全部转成Object。那么还是那个方法吗,当然编译器报方法重复是理所当然啦。

    点赞 评论
  • liyistudio
    liyistudio 2009-07-15 11:09

    [color=red]public cate(int id, String name, Set type)
    public cate(int id, String name, Set type)
    public cate(int id, String name, Set type)[/color]
    看上去是不同,但是你想到泛型具有对象擦除问题,全部转成Object。那么还是三个方法吗,当然编译器报方法重复是理所当然啦。

    点赞 评论
  • iteye_5200
    iteye_5200 2009-07-15 14:06

    你只需要写个if判断你的类型就可以了

    点赞 评论

相关推荐