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]
[code="java"][b][color=darkblue]lovewhzlq[/color] [/b][/code]说的第二个问题:
“可以改成只要一个one-to-many就解决了”,可否给个示范;
[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]
这是我写的一个参考例子
三个业务表没点关系吗,不然怎么会三个业务对象实际使用时只是其中的一个对象被实例化??
如果可以使用一个超父类,这三个业务类继承它,
那就可以使用hibernate支持的每个子类一张表的映射情况
类别表的映射文件通过设置3个 set one-to-many 分别关联至三个不同业务对象!!
也可以改成只要一个one-to-many就解决了
我觉得你的数据库和业务模型设计的有些问题了,太冗余了吧
在构造方法里面取Set type集合里面的对象instanof判断一下对象类型,然后就可以了
[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。那么还是那个方法吗,当然编译器报方法重复是理所当然啦。
[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。那么还是三个方法吗,当然编译器报方法重复是理所当然啦。
你只需要写个if判断你的类型就可以了