Hibernate一对多映射

本文详细介绍了Hibernate中的一对多映射,包括概念、关联分类和注意事项。通过具体的项目结构、实现思路和代码示例,展示了如何进行实体类映射配置、DAO方法实现以及JUnit测试。最后,呈现了数据库中一对多映射的最终效果。
摘要由CSDN通过智能技术生成

前言

今天为大家分享的是Hibernate的映射,主要讲的是一对多的映射, hibernate的其他知识点之前就有提及过,以下是博客链接:

1、hibernate的初步介绍与学习

2、hibernate的入门

3、hibernate的多对多映射

关联

1、概念

关联指的是类之间的引用关系。

如果类A与类B关联,那么被引用的类B将被定义为类A的属性。
      public class A{
   
        private B b = new B;
        public A(){
   }
     }

就好比你需要给学生和学生成绩之间建立联系,此时你就可以在学生实体类中把学生成绩的实体类当作一个属性去声明,这时就可以获取关于学生成绩表的所有属性。

2、关联的分类

关联可以分为一对一、一对多/多对一、多对多关联

一对一:可以理解为一对一辅导的家教关系!

一对多: 可以理解为一个老师教多个学生!

多对一:可以理解为一个人身上有多个角色,但是不管有多个角色,对应的都是这一个人!

多对多:可以理解为多个人对多种事物的看法!

注意:关联是有方向的

3、注意要点

这个错误的出现:是因为hibernate的项目中没有hibernate.cfg.xml配置文件!
在这里插入图片描述
java.lang.IllegalStateException: Transaction already active
在这里插入图片描述

错误展示
在这里插入图片描述
事物是活跃的!

出现这个错误的原因:多了ts.begin()这一行代码,把这一行代码删掉就好了!
在这里插入图片描述
此时订单项没有数据
在这里插入图片描述

一对多映射

项目整体结构介绍:
在这里插入图片描述

1、实现思路

一对多映射可以看作是一个订单对应多个订单项之间的映射!

2、代码实现

实体类

Order:

属性的set、get方法、有参、无参构造方法、toString方法

package com.wangqiuping.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * 数据库订单表的实体类
 * @author wangqiuping
 *  2020年7月26日  上午9:02:51
 */

public class Order implements Serializable{
   

private  Integer  orderId;
private  String  orderNo;

//建立实体类之间的关联关系
private  Set<OrderItem>  items=new HashSet<>();

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> getItems() {
   
	return items;
}
public void setItems(Set<OrderItem> items) {
   
	this.items = items;
}
public Order() {
   
	super();
}
public Order(Integer orderId, String orderNo, Set<OrderItem> items) {
   
	super();
	this.orderId = orderId;
	this.orderNo = orderNo;
	this.items = items;
}
@Override
public String toString() {
   
	return "Order [orderId=" + orderId + ", orderNo=" + orderNo + ", items=" + items + "]";
}	
}

OrderItem
属性的set、get方法、有参、无参构造方法、toString方法

package com.wangqiuping.entity;

import java.io.Serializable;
/**
 * 数据库订单项的实体类
 * @author wangqiuping
 *  2020年7月26日  上午9:06:13
 */
public class OrderItem implements Serializable{
   

private  Integer  orderItemId;
private  Integer  productId;
private  Integer  quantity;
private  Integer  oid;

//把类当作属性进行声明
private  Order    order;

public Integer getOrderItemId() {
   
	return orderItemId;
}
public void setOrderItemId(Integer orderItemId) {
   
	this.orderItemId = orderItemId;
}
public Integer getProductId() {
   
	return productId;
}
public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值