用Hibernate来处理一些对象及其相互关系,使用得当的话,往往能让设计和实现简单、明了。 这里记录了一种多对多的实方式。
Hibernate是用于java的开源的对象/关系映射工具,她让我们对数据的处理更加抽象和简单。
这里假设一个CustChanl 可以属于多个CustChanlGrp, 一个CustChanlGrp可以包含多个CustChanl,即他们是many-to-many的关系。并且使用struts2、hibernate、spring。
1. 数据模型
WWMD_CUST_CHANL
Column Name | Key | Nulls | Format | Length | Definition / Comments |
CUST_CHANL_ID | PK | No | VARCHAR2 | 15 | Customer/Channel ID |
CUST_CHANL |
| No | VARCHAR2 | 100 | Customer/Channel Name |
WWMD_CUST_CHANL_GRP
Column Name | Key | Nulls | Format | Length | Definition / Comments |
CUST_CHANL_GRP_ID | PK | No | VARCHAR2 | 15 | Customer/Channel group ID |
CUST_CHANL_GRP |
| No | VARCHAR2 | 100 | Customer/Channel group name |
WWMD_CUST_CHANL_MAP
Column Name | Key | Nulls | Format | Length | Definition / Comments |
CUST_CHANL_GRP_ID | PK | No | VARCHAR2 | 15 | Customer/Channel group ID referencing WWMD_CUST_CHANL_GRP |
CUST_CHANL_ID | PK | No | VARCHAR2 | 15 | Customer/Channel ID referencing WWMD_CUST_CHANL |
2.持久层对象(POJO)
CustChanl ------对应实体表
CustChanlMap ---对应关系表
3. 映射文件(数据表和java对象的桥梁)
CustChanl.hbm.xml
CustChanlGrp.hbm.xml
CustChanlMap.hbm.xml
4.分别创建CustChanl和CustChanlGrp的DAO的实现类和接口(略),实现对数据库的操作。
CustChanlDaoImpl
CustChanlGrpDaoImpl
5.设置Hibernate SessionFactory
6.spring容器中,定义好相应的Dao
custChanlGrpDao and custChanlDao
7. Dao在业务层的定义(定义要直接设为null,不能使用new的方式,并且要定义好相应的get和set方法,dao有spring容器管理)
8. 使用,Action继承该base类,直接调用定义好了的dao就行了。
9. 总结
在设计CustChanl对象的时候,添加一个Set类型的属性用来存放他所属的group,配置好hbm文件,这样在对CustChanl对象操作时,他与他所属的group的关系会有hibernate自动维护,这里把对象的关系转换成了对象的一个属性进行操作,并且有有hibernate自动维护;CustChanlGrp对象也同理。
CustChanlGrp ----------对应实体表