当前位置: 首页 > news >正文

hibernate(一对多)

Hibernate关联关系
关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如:
订单和订单项
一个订单对应多个订单项
Order.java

package entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Order implements Serializable { private static final long serialVersionUID = -1737859893948370664L; private Integer orderId; private String orderNo; private Set<OrderItem> orderItem = new HashSet<OrderItem>(); public Order() { super(); } public Integer getOrderId() { return orderId; } public void setOrderId(Integer orderId) { this.orderId = orderId; } public String getOrderNo() { return orderNo; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; } public Set<OrderItem> getOrderItem() { return orderItem; } public void setOrderItem(Set<OrderItem> orderItem) { this.orderItem = orderItem; } @Override public String toString() { return "Order [orderId=" + orderId + ", orderNo=" + orderNo + "]"; } }

订单配置文件Order.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="entity.Order" table="t_order"> <id name="orderId" column="order_id" type="integer"> <generator class="native"></generator> </id> <property name="orderNo" column="order_no" type="string"></property> <!-- lazy:是否懒加载,默认是懒加载的true 懒汉模式 name:类的关联属性名 cascade:级联关系 级联新增与修改 inverse:关联关系交给对方控制 默认是true,当前类不维护关联关系 子标签key:column:主表的主键,从表的外键 --> <set name="orderItem" inverse="true" cascade="save-update"> <key column="oid"></key> <one-to-many class="entity.OrderItem"/> </set> </class> </hibernate-mapping>

订单项
OrderItem.java

package entity; import java.io.Serializable; public class OrderItem implements Serializable{ private static final long serialVersionUID = 7224901622594643894L; private Integer orderItemId; private Integer productId; private Integer quantity; private Integer oid; //如果类OrderItem与Order关联,那么被引用的类Order将被定义为类OrderItem的属性 private Order order; public OrderItem() { super(); } public Integer getOrderItemId() { return orderItemId; } public void setOrderItemId(Integer orderItemId) { this.orderItemId = orderItemId; } public Integer getProductId() { return productId; } public void setProductId(Integer productId) { this.productId = productId; } public Integer getQuantity() { return quantity; } public void setQuantity(Integer quantity) { this.quantity = quantity; } public Integer getOid() { return oid; } public void setOid(Integer oid) { this.oid = oid; } public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } @Override public String toString() { return "OrderItem [orderItemId=" + orderItemId + ", productId=" + productId + ", quantity=" + quantity +"]"; } }

订单项配置文件OrderItem.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="entity.OrderItem" table="t_order_item"> <id name="orderItemId" column="order_item_id" type="integer"> <generator class="native"></generator> </id> <property name="productId" column="product_id" type="integer"></property> <property name="quantity" column="quantity" type="integer"></property> <property insert="false" update="false" name="oid" column="oid" type="integer"></property> <many-to-one name="order" class="entity.Order" column="oid"></many-to-one> </class> </hibernate-mapping>

编写Junit测试类
OrderDAOTest

package dao; import org.junit.Before; import org.junit.Test; import entity.Order; import entity.OrderItem; public class OrderDAOTest { private OrderDAO orderDAO; private Order order; @Before public void setUp() throws Exception { orderDAO = new OrderDAO(); order = new Order(); } @Test public void testAdd() { order.setOrderNo("p3"); OrderItem orderItem = null; for (int i = 1; i <= 10; i++) { orderItem = new OrderItem(); orderItem.setProductId(i); orderItem.setQuantity(i+1); orderItem.setOrder(order); order.getOrderItem().add(orderItem); } orderDAO.add(order); } @Test public void testLoad() { order.setOrderId(3); Order load = orderDAO.load(order); System.out.println(load.getOrderId()); System.out.println(load.getOrderNo()); System.out.println(load.getOrderItem().size()); } }

懒汉模式:加载是不创建实例,用户获取时才真正判断是否为空,如果为空才创建实例

public class Singleton2 { //构造方法私有化,不允许外面直接创建对象 private Singleton2(){} //声明类的唯一实例,使用private static 修饰 private static Singleton2 instance; //提供一个获取实例的方法,使用 public staitc修饰 public static Singleton2 getInstance() { if(instance==null) { instance=new Singleton2(); } return instance; } } public class Test { public static void main(String[] args) { Singleton2 s3=Singleton2.getInstance(); Singleton2 s4=Singleton2.getInstance(); if(s3==s4) System.out.println("s1和s2是同一个实例"); else System.out.println("s1和s2不是同一个实例"); } }

懒加载(lazy):就是延时加载,延迟加载。
lazy有三个属性:true、false、extra(集合属性时候使用)
true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据。
false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据。
extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。extra能够更高性能的提升Hibernate的查询效率。

http://www.jsqmd.com/news/1282701/

相关文章:

  • 机动车M站行业优质品牌综合分析与深度行业分析,M站维修治理设备/柴油车尾气检测/汽车M站设备,M站公司找哪家 - 品牌推荐师
  • TI评估模块安全使用指南:从原型验证到产品合规的边界与风险
  • AI内容检测与降AI率技术实战指南
  • 企业级钓鱼测试平台Gophish部署与实战指南
  • 2026年7月上饶商务包车旅行社,WiFi+移动办公+司机正装,3个判断标准 - 江西旅讯
  • Claude Opus 5以61分登顶智能指数,成本较Fable 5降低26%
  • EMC设计与PCB接地技术实战解析
  • 2026 年现阶段,永州值得关注的隔音屏障供应商哪家靠谱,你家窗外那道“隐形盾牌”,竟还能帮你省下近千元家居降噪预算? - 行业推荐官[官方】--
  • Wordpress更换域名后台无法打开以及内容页打开全部404
  • 如何快速获取六大网盘直链:免费开源的终极下载解决方案
  • 【项目实践】—— 如何实现RBAC权限管理系统
  • 如何在5分钟内搭建免费私有搜索引擎:SearXNG Docker完整指南
  • Jetson Nano GPIO 引脚全解析:从硬件定义到 Python 控制实战
  • 石景山日常典藏奢品,养护优劣形成明显的参考数值落差 - 生活时报
  • 数字资本时代的精神生产、叙事殖民与文明再生产危机
  • 浦东27家中检认证实体店地址全公开|上海浦东专业回收爱马仕实体店铺中检认证|到店交易流程指南 - 讯息早知道
  • 硕士论文 AI 辅助写作:工具筛选方法,平衡效率、质量与学术规范要求 - 爱学习的肖博
  • 从“想太多”到“做出来”:我的Vibe Coding 30天实战心路(附小游戏案例)
  • 风电功率预测:神经网络优化与MATLAB实现
  • 净化本地交易环境:北京通州首饰回收乱象排查与合规选择 - 生活时报
  • redis持久化详解
  • 练习题:有1、2、3、4个数字,能组成多少个互不相同且不重复的三位数字?都是多少
  • 北京西城成套翡翠藏品,配套证书完整度优化藏品评估 - 生活时报
  • 使用dplyr高效处理时间序列数据的技巧与实践
  • 计算机毕业设计之基于SpringBoot的儿童图书借阅系统的设计与实现
  • MCP、Skill、Hook如何给大模型装上护栏
  • 破解激光锡膏炸锡难题:VAPS四维防控体系如何将不良率降至1%以下? - 汇聚至此
  • 告别社保运维难题!郑州企业一站式社保人力服务测评 - 优企甄选
  • 去水印小程序哪个稳定好用 2026 实测这几个免安装工具就够了 - 耶斯去水印
  • 基于Claude模型族的智能路由策略:平衡成本与质量的思考杠杆实践