框架漫谈之hibernate(四)hibernate一对多、多对多实体类xml配置
来源:互联网 发布:数据挖掘和搜索 编辑:程序博客网 时间:2024/06/05 16:25
1.数据库建表SQL
create database test_hibernate;use test_hibernate;/*创建客户表*/CREATE TABLE `cst_customer` ( `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)', `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源', `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业', `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别', `cust_address` varchar(128) DEFAULT NULL COMMENT '客户联系地址', `cust_phone` varchar(64) DEFAULT NULL COMMENT '客户联系电话', PRIMARY KEY (`cust_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;/*创建联系人表*/CREATE TABLE `cst_linkman` ( `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)', `lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名', `lkm_gender` varchar(10) DEFAULT NULL COMMENT '联系人性别', `lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话', `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机', `lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱', `lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位', `lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注', PRIMARY KEY (`lkm_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;/*创建用户表*/CREATE TABLE `sys_user` ( `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用户id', `user_code` varchar(32) NOT NULL COMMENT '用户账号', `user_name` varchar(64) NOT NULL COMMENT '用户名称', `user_password` varchar(32) NOT NULL COMMENT '用户密码', `user_state` char(1) NOT NULL COMMENT '1:正常,0:暂停', PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;/*创建角色表*/create table `sys_role`( role_id bigint(32) primary key auto_increment, role_name varchar(100), role_memo varchar(255));/*创建用户和角色关联系表*/CREATE TABLE `sys_user_role` ( `role_id` bigint(32) NOT NULL COMMENT '角色id', `user_id` bigint(32) NOT NULL COMMENT '用户id', PRIMARY KEY (`role_id`,`user_id`), KEY `FK_user_role_user_id` (`user_id`), CONSTRAINT `FK_user_role_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`role_id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `FK_user_role_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
学习hibernate中多表映射应该遵循步骤:
1、明确表之前确实是如你所想的关系
2、在数据库中是SQL语句建立他们的之间的关系
3、在实体类中描述出两个实体之间的关系
4、在映射配置文件中建立他们的关系映射
2.客户联系人一对多
/** * 客户的实体类 * @author ZhuPengWei */public class Customer implements Serializable { private Long custId; private String custName; private String custSource; private String custIndustry; private String custLevel; private String custAddress; private String custPhone; //一对多关系映射:一个客户可以包含多个联系人 private Set<LinkMan> linkmans = new HashSet<LinkMan>(0); //提供对外访问的setter,getter .......}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="test.domain"> <class name="Customer" table="cst_customer"> <id name="custId" column="cust_id"> <generator class="native"></generator> </id> <property name="custName" column="cust_name"></property> <property name="custIndustry" column="cust_industry"></property> <property name="custSource" column="cust_source"></property> <property name="custLevel" column="cust_level"></property> <property name="custAddress" column="cust_address"></property> <property name="custPhone" column="cust_phone"></property> <!-- 一对多关系映射: 涉及的标签: set: 作用:用于映射set集合属性。 属性: name:指定集合属性的名称 table:指定集合元素所对应的表。在一对多时,table属性可以不写。 one-to-many: 作用:指定当前映射文件所对应的实体和集合元素之间的关系是一对多。 属性: class:指定集合元素所对应的实体类名称 key: 作用:用于映射外键的。 属性: column:指定外键字段名称。 --> <set name="linkmans" table="cst_linkman" > <key column="lkm_cust_id"/> <one-to-many class="LinkMan"/> </set> </class></hibernate-mapping>
/** * 一个联系人的实体 * @author ZhuPengWei */public class LinkMan implements Serializable { private Long lkmId; private String lkmName; private String lkmGender; private String lkmPhone; private String lkmMobile; private String lkmEmail; private String lkmPosition; private String lkmMemo; //多对一关系映射:多个联系人对应一个客户 private Customer customer; //提供对外访问的setter,getter .......}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="test.domain"> <class name="LinkMan" table="cst_linkman"> <id name="lkmId" column="lkm_id"> <generator class="native"></generator> </id> <property name="lkmName" column="lkm_name"></property> <property name="lkmGender" column="lkm_gender"></property> <property name="lkmPhone" column="lkm_phone"></property> <property name="lkmMobile" column="lkm_mobile"></property> <property name="lkmEmail" column="lkm_email"></property> <property name="lkmPosition" column="lkm_position"></property> <property name="lkmMemo" column="lkm_memo"></property> <!-- 多对一关系映射 涉及的标签: many-to-one 作用:用于映射多对一的关系 属性: name:指的实体类中引用客户实体的属性名称 column:指的是从表中外键字段的名称 class:指定的是属性所对应的实体类 --> <many-to-one name="customer" class="Customer" column="lkm_cust_id"></many-to-one> </class></hibernate-mapping>
3.用户角色多对多
/** * 角色的实体类 * @author ZhuPengWei */public class SysRole implements Serializable { private Long roleId; private String roleName; private String roleMemo; //多对多关系映射:一个角色可以赋予多个用户 private Set<SysUser> users = new HashSet<SysUser>(0); //对外提供setter,getter .......}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="test.domain"> <class name="SysRole" table="sys_role"> <id name="roleId" column="role_id"> <generator class="native"></generator> </id> <property name="roleName" column="role_name"></property> <property name="roleMemo" column="role_memo"></property> <!-- 多对多关系映射 --> <set name="users" table="user_role_ref" > <key column="role_id"/> <many-to-many class="SysUser" column="user_id"/> </set> </class></hibernate-mapping>
/** * 一个用户实体 * @author ZhuPengWei */public class SysUser implements Serializable { private Long userId; private String userCode; private String userName; private String userPassword; private String userState; //多对多关系映射:一个用户可以有多个角色 private Set<SysRole> roles = new HashSet<SysRole>(0); //对外提供setter,getter .......}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="test.domain"> <class name="SysUser" table="sys_user"> <id name="userId" column="user_id"> <generator class="native"></generator> </id> <property name="userCode" column="user_code"></property> <property name="userName" column="user_name"></property> <property name="userPassword" column="user_password"></property> <property name="userState" column="user_state"></property> <!-- 多对多的关系映射 --> <set name="roles" table="user_role_ref" > <key column="user_id"/> <many-to-many class="SysRole" column="role_id"/> </set> </class></hibernate-mapping>
阅读全文
0 0
- 框架漫谈之hibernate(四)hibernate一对多、多对多实体类xml配置
- Hibernate框架-------一对多映射(四)
- hibernate一对多关联配置(四)
- hibernate一对多配置
- hibernate一对多配置
- Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)
- hibernate实体映射配置:多对多、一对多、多对一、特殊的多对一
- Hibernate(四)一对多映射
- Hibernate入门19 - 一对多实体映像
- 【hibernate框架】一对多(多对一)双向关联(XML实现)
- 初学Hibernate--(2)配置Hibernate+多对一实体映像
- Hibernate:一对多关系在实体类使用注解
- Hibernate关联关系配置xml(一对多、一对一和多对多)
- 【hibernate框架】一对多(多对一)双向CRUD-Cascade1
- 【hibernate框架】一对多(多对一)双向CRUD-Cascade2
- 【hibernate框架】一对多(多对一)双向CRUD-Fetch1
- 【hibernate框架】一对多(多对一)双向CRUD-Fetch2
- 【Hibernate框架】关联映射(一对多,多对一)
- HBase数据存储格式
- ACM-9月17日周日周末训练心得
- CAS操作ABA问题发生的场景
- 分页插件PageHelper使用
- LG>P1020导弹拦截~~A简单版
- 框架漫谈之hibernate(四)hibernate一对多、多对多实体类xml配置
- 读书笔记∣标签:标记系统设计实践
- 【LeetCode】Sort List 链表排序- Medium ++(Merge&Quick Sort)
- centos6.4安装zookeeper
- 2.zookeeper中的基本概念
- session、cookie与“记住我的登录状态”的功能的实现
- xml解析DOM解析和SAX解析对比
- 3.zookeeper客户端使用
- 笔、面试经验