Hibernate一对多映射
前言
今天为大家分享的是Hibernate的映射,主要讲的是一对多的映射, 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