1.实体类

package com.lanou3g.bean;
/** CREATE TABLE `cst_linkman` (`lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)',`lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名',`lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id',`lkm_gender` char(1) 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_qq` varchar(16) DEFAULT NULL COMMENT '联系人qq',`lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位',`lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注',PRIMARY KEY (`lkm_id`),KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`),CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
)*/public class LinkMan {private Long lkm_id;private String lkm_name;private Long lkm_cust_id;private Character lkm_gender;private String lkm_phone;private String lkm_mobile;private String lkm_email;private String lkm_qq;private String lkm_position;private String lkm_memo;// 多表表示跟一表的关系private Customer customer;public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public LinkMan() {super();// TODO Auto-generated constructor stub}public LinkMan(Long lkm_id, String lkm_name, Long lkm_cust_id, Character lkm_gender, String lkm_phone,String lkm_mobile, String lkm_email, String lkm_qq, String lkm_position, String lkm_memo) {super();this.lkm_id = lkm_id;this.lkm_name = lkm_name;this.lkm_cust_id = lkm_cust_id;this.lkm_gender = lkm_gender;this.lkm_phone = lkm_phone;this.lkm_mobile = lkm_mobile;this.lkm_email = lkm_email;this.lkm_qq = lkm_qq;this.lkm_position = lkm_position;this.lkm_memo = lkm_memo;}public Long getLkm_id() {return lkm_id;}public void setLkm_id(Long lkm_id) {this.lkm_id = lkm_id;}public String getLkm_name() {return lkm_name;}public void setLkm_name(String lkm_name) {this.lkm_name = lkm_name;}public Long getLkm_cust_id() {return lkm_cust_id;}public void setLkm_cust_id(Long lkm_cust_id) {this.lkm_cust_id = lkm_cust_id;}public Character getLkm_gender() {return lkm_gender;}public void setLkm_gender(Character lkm_gender) {this.lkm_gender = lkm_gender;}public String getLkm_phone() {return lkm_phone;}public void setLkm_phone(String lkm_phone) {this.lkm_phone = lkm_phone;}public String getLkm_mobile() {return lkm_mobile;}public void setLkm_mobile(String lkm_mobile) {this.lkm_mobile = lkm_mobile;}public String getLkm_email() {return lkm_email;}public void setLkm_email(String lkm_email) {this.lkm_email = lkm_email;}public String getLkm_qq() {return lkm_qq;}public void setLkm_qq(String lkm_qq) {this.lkm_qq = lkm_qq;}public String getLkm_position() {return lkm_position;}public void setLkm_position(String lkm_position) {this.lkm_position = lkm_position;}public String getLkm_memo() {return lkm_memo;}public void setLkm_memo(String lkm_memo) {this.lkm_memo = lkm_memo;}@Overridepublic String toString() {return "LinkMan [lkm_id=" + lkm_id + ", lkm_name=" + lkm_name + ", lkm_cust_id=" + lkm_cust_id + ", lkm_gender="+ lkm_gender + ", lkm_phone=" + lkm_phone + ", lkm_mobile=" + lkm_mobile + ", lkm_email=" + lkm_email+ ", lkm_qq=" + lkm_qq + ", lkm_position=" + lkm_position + ", lkm_memo=" + lkm_memo + "]";}
}
package com.lanou3g.bean;import java.util.HashSet;
import java.util.Set;/*
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_linkman` VARCHAR (64) DEFAULT NULL COMMENT '联系人',
`cust_phone` VARCHAR (64) DEFAULT NULL COMMENT '固定电话',
`cust_mobile` VARCHAR (16) DEFAULT NULL COMMENT '移动电话',
PRIMARY KEY (`cust_id`)
*/
public class Customer {private Long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_linkman;private String cust_phone;private String cust_mobile;// 表示一对多关系的容器// 注意:容器你必须初始化了 才能保存东西private Set<LinkMan> linkMans = new HashSet<>();public Set<LinkMan> getLinkMans() {return linkMans;}public void setLinkMans(Set<LinkMan> linkMans) {this.linkMans = linkMans;}public Customer() {super();// TODO Auto-generated constructor stub}public Customer(Long cust_id, String cust_name, String cust_source, String cust_industry, String cust_level,String cust_linkman, String cust_phone, String cust_mobile) {super();this.cust_id = cust_id;this.cust_name = cust_name;this.cust_source = cust_source;this.cust_industry = cust_industry;this.cust_level = cust_level;this.cust_linkman = cust_linkman;this.cust_phone = cust_phone;this.cust_mobile = cust_mobile;}public Long getCust_id() {return cust_id;}public void setCust_id(Long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_linkman() {return cust_linkman;}public void setCust_linkman(String cust_linkman) {this.cust_linkman = cust_linkman;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_source=" + cust_source+ ", cust_industry=" + cust_industry + ", cust_level=" + cust_level + ", cust_linkman=" + cust_linkman+ ", cust_phone=" + cust_phone + ", cust_mobile=" + cust_mobile + "]";}
}

2. Customter.hbm.xml配置文件

<?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="com.lanou3g.bean"><class name="LinkMan" table="cst_linkman"><id name="lkm_id" column="lkm_id"><generator class="native"></generator></id><property name="lkm_name" column="lkm_name"></property><property name="lkm_gender" column="lkm_gender"></property><property name="lkm_phone" column="lkm_phone"></property><property name="lkm_mobile" column="lkm_mobile"></property><property name="lkm_email" column="lkm_email"></property><property name="lkm_qq" column="lkm_qq"></property><property name="lkm_position" column="lkm_position"></property><property name="lkm_memo" column="lkm_memo"></property><!-- 配置表关系 --><!-- name : 表示关系的对象的属性名column : 表中外键名class : 多对一关系中 对应的实体类名注意:外键的属性值只能配一次--><many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one></class>
</hibernate-mapping>
<?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="com.lanou3g.bean"><class name="Customer" table="cst_customer"><id name="cust_id" column="cust_id"><generator class="native"></generator></id><property name="cust_name" column="cust_name"></property><property name="cust_source" column="cust_source"></property><property name="cust_industry" column="cust_industry"></property><property name="cust_level" column="cust_level"></property><property name="cust_linkman" column="cust_linkman"></property><property name="cust_phone" column="cust_phone"></property><property name="cust_mobile" column="cust_mobile"></property><!-- 配置表示关系的容器 --><!-- name: 实体类中容器的属性名column: 表中的外键名class: 表示一对多中 多表的类(全类名)inverse 控制是否维护外键inverse 默认值维护外键的关系 默认值是false结语:inverse可以减少hibernate无用的操作cascade:级连操作save-updatedeleteall == save-update + delete建议:如果要用级联操作就用sava-update慎用delete--><set name="linkMans" cascade="save-update"><key column="lkm_cust_id"></key><one-to-many class="LinkMan" /></set></class>
</hibernate-mapping>

3.hibernater测试多对一

package com.lanou3g.bean;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;public class Demo01 {/** 添加一个客户 两个联系人*/@Testpublic void fun1() {// 获取session Session session = HibernateUtils.getSession();// 开启事务Transaction transaction = session.beginTransaction();// 创建客户Customer customer = new Customer();customer.setCust_name("蓝欧科技");// 创建联系人LinkMan l1 = new LinkMan();l1.setLkm_name("杨虎");LinkMan l2 = new LinkMan();l2.setLkm_name("刘凯");// 添加实体类中的关系// 把联系人添加到集合中customer.getLinkMans().add(l1);customer.getLinkMans().add(l2);// 给联系人设置客户l1.setCustomer(customer);l2.setCustomer(customer);// 保存到数据库session.save(customer);session.save(l1);session.save(l2);// 提交事务transaction.commit();// 关闭资源session.close();}// 为客户id为1的人删除联系人id为2@Testpublic void fun2() {Session session = HibernateUtils.getSession();Transaction transaction = session.beginTransaction();// 获取id为1的客户// 持久态 在事务提交的时候 如果该对象被修改了// 那么修改的数据会被同步到数据中Customer customer = session.get(Customer.class, 1l);// 获取id为2的联系人LinkMan linkMan = session.get(LinkMan.class, 2l);// 处理实体类中的关系customer.getLinkMans().remove(linkMan);linkMan.setCustomer(null);// 从数据库中删除session.delete(linkMan);//session.update(customer);transaction.commit();session.close();}// 为客户id为1 增加联系人/** 打印的插入语句是linkman 在维护自己的表* 并且在插入的时候 已经插入了外键(外键已经有了)* * 对hibernate执行的SQL语句的优化* 打印的更新语句 是Customer来维护从而打印出来的* 这里对外键的维护 俩个表都维护一遍 造成了多余的SQL语句操作*/@Testpublic void fun3() {Session session = HibernateUtils.getSession();Transaction transaction = session.beginTransaction();Customer customer = session.get(Customer.class, 1l);//创建新的联系人LinkMan l3 = new LinkMan();l3.setLkm_name("龙哥");//处理实体类中的关系l3.setCustomer(customer);customer.getLinkMans().add(l3);//保存到数据库session.save(l3);session.update(customer);transaction.commit();session.close();}//新增客户 和 联系人(李胜运)//级连操作:可以使你减少几行代码的工作量@Testpublic void fun4() {Session session = HibernateUtils.getSession();Transaction transaction = session.beginTransaction();Customer customer = new Customer();customer.setCust_name("丰收科技");LinkMan linkMan = new LinkMan();linkMan.setLkm_name("你随意");//设置实体类customer.getLinkMans().add(linkMan);linkMan.setCustomer(customer);//保存到数据库session.save(customer);session.save(linkMan);transaction.commit();session.close();}//级连 删除id为1客户同时删除联系人@Testpublic void fun5() {Session session = HibernateUtils.getSession();Transaction transaction = session.beginTransaction();Customer customer = session.get(Customer.class, 1L);session.delete(customer);transaction.commit();session.close();}}

hibernate多对一查询相关推荐

  1. java hql多条件查询_JSP 开发之hibernate的hql查询多对多查询

    JSP 开发之hibernate的hql查询多对多查询 在hibernate的hql查询中,假如说分组信息与试题是多对多关系,那么我们要在hql查询中对含有多个分组信息的试题都要查询出来.并同时查询出 ...

  2. Hibernate 笔记 HQL查询

    http://www.cnblogs.com/zilong882008/archive/2011/11/05/2237123.html Hibernate 笔记 HQL查询(一)单属性,多属性查询 H ...

  3. 什么是hibernate N+1查询

    在Session的缓存中存放的是相互关联的对象图.默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象.以Customer和Order类为例,假定O ...

  4. hibernate hql 关联查询_Hibernate【关联查询篇】

    1. Hibernate 关联查询 1.1. 说明 Hibernate框架支持通过配置映射关系实现多表关联查询. 1.2. 类型 关联查询分为:一对一(one-to-one).一对多(one-to-m ...

  5. Hibernate多表查询实践总结

    Hibernate多表查询实践总结(2006-11-24) 实在无聊,前段时间做了个对单表的ZCGC(增删改查),练了练手,虽然做过,但还是碰到了不少问题,让自己对struts+hibernate模式 ...

  6. mybatis 一对多查询_Java自学之mybatis:使用注解方式多对一查询

    学习目的:学习使用注解方式实现多对一查询,查询出所有的Product,通过product_中的cid查询到所属的Category. Part 1 mapper CategoryMapper packa ...

  7. Hibernate(九)HQL查询

    一.Hibernate提供的查询方式 OID查询方式:主键查询.通过get()或者load()方法加载指定OID的对象查询结果为一个 HQL查询方式:通过Query接口使用HQL语言进行查询 QBC查 ...

  8. Hibernate:SQL查询 addScalar()或addEntity()

      Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.该 ...

  9. hibernate mysql 模糊查询_服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到...

    用hibernate做模糊查询,页面传递参数也处理了乱码 @Action(value="searchNameByad") public String searchNameByad( ...

最新文章

  1. 寄存器和存储器的区别_寄存器、累加器、暂存器都是什么?它们有什么区别?...
  2. 挑战马斯克的Neuralink,另一家神秘的「脑机接口」公司已获投资
  3. 笔记:前端与后台交互
  4. Java虚拟机学习 - 类加载器(ClassLoader)
  5. WF单元测试系列3:测试Activity的行为
  6. 【模型调优】风控模型调优相关知识
  7. 数据接口测试工具 Postman 介绍
  8. 字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛
  9. jquery中checkbox赋值
  10. 【李宏毅2020 ML/DL】P34 More about explainable AI | Attribution, Heatmap, explainable model
  11. 大数据外部性案例分析_大数据外部性案例分析
  12. Hadoop常用端口号汇总
  13. 计算机word设置斜框线,Word绘制多线斜线表头技巧-word技巧-电脑技巧收藏家
  14. 语言栏删除已经卸载了的输入法
  15. Windows找回磁盘被病毒感染后隐藏的文件
  16. MySQL懒查询_MySQL 5.7查询sys.schema_redundant_indexes居然慢如蜗牛...
  17. 租房注意事项(一):租房术语
  18. 【科普】Windows客户端加域管理(AD)
  19. 首届“中新人工智能高峰论坛”即将召开,周志华、李德毅......与你一起对话未来!...
  20. 创业 - 原始股与期权

热门文章

  1. oracle备份表数据
  2. 达人评测 R7 5825U 和 R5 7530U选哪个好 锐龙R75825U和R57530U对比
  3. {我喜欢你,就像喜欢当时的自己。}---《那些年,我们一起追的女孩》影评。(By:Janice)
  4. 光纤FP传感器解调分析
  5. 封装自定义Docker镜像
  6. 【JY】超详细的非牛顿流体模型使用方法
  7. “临港杯”2018年“创青春”上海青年创新创业大赛圆满落幕
  8. Docker部署前后端分离项目
  9. docker修改默认存储存储路径 The graph config file option is deprecated. Please use data-root instead.
  10. mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc