Hibernate双向多对多映射关系配置代码实例
作者:Y_wee 发布时间:2022-12-26 22:30:30
标签:Hibernate,双向,多对多,映射,配置
1、实体类
package com.yl.bean;
import java.io.Serializable;
import java.util.Set;
/**
* 商品实体类
*/
public class Goods implements Serializable {
private Integer id;//商品id
private String goodsName;//商品名
private Double price;//商品价格
private String remark;//备注
private Set<GoodsOrder> orderSet;//商品所属订单
public Goods() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Set<GoodsOrder> getOrderSet() {
return orderSet;
}
public void setOrderSet(Set<GoodsOrder> orderSet) {
this.orderSet = orderSet;
}
@Override
public String toString() {
return "Goods{" +
"goods_id=" + id +
", goodsName='" + goodsName + '\'' +
", price=" + price +
", remark='" + remark + '\'' +
", orderSet=" + orderSet +
'}';
}
}
package com.yl.bean;
import java.io.Serializable;
import java.util.Set;
/**
* 商品订单实体类
*/
public class GoodsOrder implements Serializable {
private Integer id;//订单id
private String orderNo;//订单编号
private Double price;//订单价格
private Set<Goods> goodsSet;//订单包含的商品
public GoodsOrder() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Set<Goods> getGoodsSet() {
return goodsSet;
}
public void setGoodsSet(Set<Goods> goodsSet) {
this.goodsSet = goodsSet;
}
@Override
public String toString() {
return "GoodsOrder{" +
"id=" + id +
", orderNo='" + orderNo + '\'' +
", price=" + price +
", goodsSet=" + goodsSet +
'}';
}
}
2、全局配置文件(hibernate.cfg.xml)
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据源配置-->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf8&serverTimezone=GMT%2B8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!--显示sql-->
<property name="hibernate.show_sql">true</property>
<!--自动创建表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--指定映射配置文件的位置-->
<mapping resource="com/yl/bean/Goods.hbm.xml"></mapping>
<mapping resource="com/yl/bean/GoodsOrder.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
3、商品类映射配置文件(Goods.hbm.xml)
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--配置Goods类-->
<class name="com.yl.bean.Goods" table="t_goods">
<!--主键-->
<id name="id" column="id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<property name="goodsName" column="goodsName" type="java.lang.String"></property>
<property name="price" column="price" type="java.lang.Double"></property>
<property name="remark" column="remark"></property>
<!--多对多关系映射-->
<set name="orderSet" table="t_goods_order">
<key column="goods_id"></key>
<many-to-many class="com.yl.bean.GoodsOrder" column="order_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
4、订单类映射配置文件(GoodsOrder.hbm.xml)
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--配置GoodsOrder类-->
<class name="com.yl.bean.GoodsOrder" table="t_order">
<!--主键-->
<id name="id" column="id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<property name="orderNo" column="orderNo" type="java.lang.String"></property>
<property name="price" column="price" type="java.lang.Double"></property>
<!--多对多关系映射-->
<set name="goodsSet" table="t_goods_order">
<key column="order_id"></key>
<many-to-many class="com.yl.bean.Goods" column="goods_id"></many-to-many>
</set>
</class>
</hibernate-mapping>
5、测试
@Test
public void addTest(){
Session session= HibernateUtils.getSession();
Goods goods=new Goods();
goods.setGoodsName("小米");
goods.setPrice(3999.0);
goods.setRemark("为发烧而生");
Goods goods1=new Goods();
goods1.setRemark("中华有为");
goods1.setPrice(3999.0);
goods1.setGoodsName("华为");
GoodsOrder order=new GoodsOrder();
order.setOrderNo("001");
order.setPrice(7998.0);
GoodsOrder order1=new GoodsOrder();
order1.setOrderNo("002");
order1.setPrice(7998.0);
Set<GoodsOrder> orderSet=new HashSet<>();
orderSet.add(order);
orderSet.add(order1);
goods.setOrderSet(orderSet);
goods1.setOrderSet(orderSet);
/* Set<GoodsOrder> orderSet1=new HashSet<>();
orderSet1.add(order1);
goods1.setOrderSet(orderSet1);*/
Set<Goods> goodsSet=new HashSet<>();
goodsSet.add(goods);
goodsSet.add(goods1);
//注意这里,只需要一方关联即可(上面已经关联了,所以不需要再次添加商品集合),两方关联会造成主键重复,报错
// order.setGoodsSet(goodsSet);
// order1.setGoodsSet(goodsSet);
Transaction transaction=session.beginTransaction();
session.save(goods);
session.save(goods1);
session.save(order);
session.save(order1);
transaction.commit();
session.close();
}
来源:https://www.cnblogs.com/Y-wee/p/13804845.html
0
投稿
猜你喜欢
- Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化,动态初始化:指定长度,由系统给出初始化值静态初始化:给出初始化值,由系统
- import java.util.Arrays;/** * 栈的实现<br> * @author Skip&
- 为什么要写这篇文章经过了若干年的发展,Java逐步从java8升级为java11,java17。让我们对比学习一下最新一版的LTS版本和ja
- 一、静态代理模式1.1、 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标
- 在前面一篇Java Comparable和Comparator对比详解中,对于java中的排序方法进行比较和具体剖析,主要是针对 Compa
- byte:java中最小的数据类型。1字节/8位。-128(2^7)~127(2^7-1),默认值0。short:短整型,2字节/16位,取
- 由于springboot常用war包部署,改为cloud开发模式多端口情况下,部署反而不习惯毕竟,war包要不要项目名访问都必须放在tomc
- spring.thymeleaf.cache=false不起作用配置是清除缓存,实现热部署。也就是修改了html后不用重启,刷新页面就能看到
- cookie和session的区别和联系cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储
- 什么是注解在早期的工作的时候 ,自定义注解写的比较多,可大多都只是因为 这样看起来 不会存在一堆代码耦合在一起的情况,所以使用了自定义注解,
- springboot pom文件project报错问题如下 解决方案情况1:maven版本要和课程保持一致,网盘直接下载。情况2:
- 前言在电商的应用中,最常见的就是在首页或完成某事件之后,弹出一堆的活动/广告。假如重叠弹出,很丑,给用户的体验也不好,所以一般都会依次依条件
- 1 环境部署1.1 jdk-8u111-windows-x64环境变量 JAVA_HOME:C:\Program Files\Java\jd
- sms4j 2.0 全新来袭即sms-aggregation成功加入dromara之后,很多人向我们反应了项目名称太长不好记,也太绕口, 在
- 从这章开始,会介绍几个常用的函数式接口工具,首先先来看下这个大家族:首先从Function接口开始介绍一. 概述该接口顾名思义,函数的意思,
- Java调用Oracle存储过程详解步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Or
- 在类中自定义的“函数”称为“方法”,由于C#是完全面向对象的
- 开发 Web 应用的思路实现一个简单的 JSP/Servlet。搭建创建 Web 应用工程的环境。创建 Web 应用工程。Web 应用工程的
- 在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来
- 结束firefox的进程,一句代码就够了,如下:Runtime.getRuntime().exec("taskkill /F /I