系统有3张表:
=============================================================================
有一个对象扩展表(ExtObj) 主要用于存储下面2类对象(雇员和档案信息)的共用属性
obj_id 对象id (该列的值根据obj_type的不同可为雇员表或档案表的主键值)
obj_type 对象类型(1表示雇员,2表示档案信息)
rcd_per 录入人
rcd_time 录入时间
=============================================================================
有一个雇员表(Employee)
id 主键
name 姓名
age 年龄
==============================================================================
有一个档案信息表(Infor)
id 主键
content 内容问怎么设计实体以及映射,才满足要求
其中ExtObj相当于雇员表或档案信息表的扩展表 ,和2类对象都是一一对应的关系
解决方案 »
- 一个struts2的问题,请高手解答!
- SSH中ORACLE数据库连接为什么会经常断掉
- servlet异常处理的方式
- 急!!!在程序运行时才决定它最多能创建的实例个数 Java
- 帮忙看看程序!!
- IBATIS 复杂类型属性(即自定义类型的属性)问题各位帮帮小弟,搞了好久没有找到问题原因
- xstl如何将中文正确显示?????
- jboss连oracle时 好像oracle-ds.xml有问题 帮忙!
- jboss下EJB的运行错误???
- 在java中如何验证ssl证书的有效性
- 警告: No configuration found for the specified action: 'login.action' in namespace: '/'. Form action d
- 简单的jta问题
自己关系弄清楚了就很简单了
@Embeddable
public class ExtObjPK implements Serializable{
private Integer id;//假设Employee和Infor的id都是Integer类,如果不是就统一为String类型
private String className;//类名,如:Employee.getClass().getName(); private Object toObject(){
Class clazz = Class.forName(this.className);//上塑成类
Constructor c = clazz.getConstructor(Integer.class);//生成一个构造器
Object obj = c.newInstance(id);//构造出一个对象,注意:Employee和Infor类必须有相应的构造方法。
} public ExtObjPK(Integer id, String className){
this.id = id;
this. className = className;
}
}@Entity
public class ExtObj implements Serializable{
@Id
private ExtObjPK id;
private YourClass rcd_per; //录入人
private YourClass rcd_time; //录入时间
private Employee employee;
private Infor infor; public void setId(){
if(employee != null)
this.id = new ExtObjPK(employee.getId(),employee.getClass().getName());
if(infor != null)
this.id = new ExtObjPK(infor.getId(), infor.getClass().getName());
} other getter & setter ...
}@Entity
public class Employee{ private Integer id;
private String name;
private Integer age;
... pubic Employee(Integer id){this.id = id;}
}@Entity
public class Infor{ private Integer id;
private String content;
... pubic Infor(Integer id){this.id = id;}
}
雇员表employee表假设有一条数据
id name age
ABDCDEF68853ABAAA 张三 18档案资料表有一条数据
id content
INF20081101133021X0001 关于数据科技创新的。对象扩展表的数据为
obj_id obj_type rcd_per rcd_time
ABDCDEF68853ABAAA 1 admin 20091223 (和员工表数据一一对应)
INF20081101133021X0001 2 admin 20100111 (和档案表数据一一对应)
ExtObj这个实体类,的主键看来要设计成联合主键obj_type和obj_id用过hibernate这么久了,我就没这样用过,一般数据库字典用的是继承映射。。