hibernate中多对多映射配置详细解析
来源:互联网 发布:通过软件收短信 编辑:程序博客网 时间:2024/05/18 11:36
本工程以项目与开发人员构成多对多的关系来展开,构建多对多的关系,具体实现代码如下所示:
1.hibernate.cfg.xml文件
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <!-- 通常,一个session-factory节点代表一个数据库 --><session-factory><!-- 1.数据库连接配置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hib-demo</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!--数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- 2.其他相关配置 --> <!--2.1显示hibernate在运行的时候执行的sql语句 --><property name="hibernate.show_sql">true</property> <!-- 2.2格式化sql <property name="hibernate.format_sql">true</property>--><!-- 2.3自动建表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 3.加载所有映射 <mapping resource="cn/itcast/a_hello/Employee.hbm.xml"/>--></session-factory></hibernate-configuration>
2.Developer
package cn.itcast.c_many2many;import java.util.HashSet;import java.util.Set;//开发人员信息public class Developer {private Integer d_id;//开发人员编号private String d_name;//开发人员姓名//开发人员参与的多个项目private Set<Project> projects=new HashSet<Project>();public Integer getD_id() {return d_id;}public void setD_id(Integer d_id) {this.d_id = d_id;}public String getD_name() {return d_name;}public void setD_name(String d_name) {this.d_name = d_name;}public Set<Project> getProjects() {return projects;}public void setProjects(Set<Project> projects) {this.projects = projects;}}
3.Project
package cn.itcast.c_many2many;import java.util.HashSet;import java.util.Set;public class Project {private Integer prj_id;//项目编号private String prj_name;//项目名称//项目下的多个员工private Set<Developer> developers=new HashSet<Developer>();public Integer getPrj_id() {return prj_id;}public void setPrj_id(Integer prj_id) {this.prj_id = prj_id;}public String getPrj_name() {return prj_name;}public void setPrj_name(String prj_name) {this.prj_name = prj_name;}public Set<Developer> getDevelopers() {return developers;}public void setDevelopers(Set<Developer> developers) {this.developers = developers;}}
4.Developer.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- This mapping demonstrates content-based discrimination for the table-per-hierarchy mapping strategy, using a formula discriminator.--><!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中 --><!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径) auto-import 默认为true,在写HQL的时候自动导入包名 如果指定为false,在写HQL的时候必须要写上类的全名--><hibernate-mapping package="cn.itcast.c_many2many"><class name="Developer" table="t_developer"> <id name="d_id"> <generator class="native"></generator> </id> <property name="d_name"></property> <set name="projects" table="t_relation"> <key column="did"></key> <many-to-many column="prjId" class="Project"></many-to-many> </set> </class></hibernate-mapping>
5.Project.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- This mapping demonstrates content-based discrimination for the table-per-hierarchy mapping strategy, using a formula discriminator.--><!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中 --><!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径) auto-import 默认为true,在写HQL的时候自动导入包名 如果指定为false,在写HQL的时候必须要写上类的全名--><hibernate-mapping package="cn.itcast.c_many2many"><class name="Project" table="t_project"> <id name="prj_id"> <generator class="native"></generator> </id> <property name="prj_name"></property> <!-- 多对多映射: 1.映射的集合属性:developers 2.集合属性:对应的中间表,t_relation 3.外键字段:prjid 4.外键字段:对应的中间表字段,did 5.集合属性元素的类型 --> <set name="developers" table="t_relation"> <key column="prjId"></key> <many-to-many column="did" class="Developer"></many-to-many> </set> </class></hibernate-mapping>
6.junit测试
package cn.itcast.c_many2many;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.classic.Session;import org.junit.Test;public class App_save {private static SessionFactory sf;static{sf=new Configuration().configure().addClass(Project.class).addClass(Developer.class) //测试的时候使用.buildSessionFactory();}//多对多数据的保存,只能通过一方维护另一方,不能重复维护!@Testpublic void Save() {Session session=sf.openSession();session.beginTransaction(); //创建项目对象Project prj_ds=new Project();prj_ds.setPrj_name("电商系统");Project prj_oa=new Project();prj_oa.setPrj_name("OA系统");//创建员工对象Developer dev_cj=new Developer();dev_cj.setD_name("刘德华");Developer dev_wc=new Developer();dev_wc.setD_name("高园园");Developer dev_lz=new Developer();dev_lz.setD_name("王明");//关系prj_ds.getDevelopers().add(dev_cj);prj_ds.getDevelopers().add(dev_wc);//电商系统 :刘德华,高园园prj_oa.getDevelopers().add(dev_cj);prj_oa.getDevelopers().add(dev_lz);//OA系统:刘德华,王明//保存session.save(dev_cj);session.save(dev_wc);session.save(dev_lz);session.save(prj_ds);session.save(prj_oa);session.getTransaction().commit();session.close();//得到九条结果/*Hibernate: insert into t_developer (d_name) values (?)Hibernate: insert into t_developer (d_name) values (?)Hibernate: insert into t_developer (d_name) values (?)Hibernate: insert into t_project (prj_name) values (?)Hibernate: insert into t_project (prj_name) values (?)Hibernate: insert into t_relation (prjId, did) values (?, ?)Hibernate: insert into t_relation (prjId, did) values (?, ?)Hibernate: insert into t_relation (prjId, did) values (?, ?)Hibernate: insert into t_relation (prjId, did) values (?, ?)*/}@Testpublic void Save2() {Session session=sf.openSession();session.beginTransaction();session.getTransaction().commit();session.close();}}
1 0
- hibernate中多对多映射配置详细解析
- hibernate中组件映射配置详细解析
- hibernate中一对一映射配置详细解析(一)
- hibernate中一对一映射配置详细解析(二)
- hibernate中继承映射配置详细解析(一)
- hibernate中继承映射配置详细解析(二)
- hibernate中继承映射配置详细解析(三)
- hibernate中继承映射配置详细解析(四)
- Hibernate 多对多关联映射配置
- Hibernate关联关系映射-----单向多对一映射配置
- hibernate中多对多映射
- hibernate中多对多关系映射
- hibernate中多对一关系映射
- hibernate中多对一映射查询
- hibernate中多对一映射删除
- hibernate中多对一映射更新
- Hibernate关系配置之一对多映射配置
- Hibernate关系配置之多对多映射配置
- Toolbar和Menu的结合
- Linux上搭建nginx,及简单配置
- 获取java时间戳的方法
- 安装bash on windows卡在“正在提取文件系统,这将需要几分钟的时间”的解决方法
- Jfinal登录拦截器,死循环,原因以及解决办法
- hibernate中多对多映射配置详细解析
- java review
- Windows Live Writer离线博客工具使用教程(适用于博客园、CSDN、51CTO等等博客)
- 粗糙的玩一玩javascript的"编译"(2)css也能"编译"?
- jdk1.7以后的switch可以匹配字符串
- 面试-百度大数据部门RD
- Matlab中用到的bsxfun函数
- 服务器
- centos7安装ntfs-3g以支持NTFS格式磁盘