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
投稿
猜你喜欢
- 基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!Apple.javapackage strategy;/**
- 1.挂起函数挂起函数在Kotlin协程中是一个比较重要的知识点,协程的非阻塞式、Channel、Flow等API都对它有充分的理解才能在学习
- 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去
- 今天我们来看一下在C#中对象序列化XML的方法。不得不说,在这个Json横行的年代,XML虽然式微,但也的确是一股子清流。(个人感觉)不多说
- IDEA修改idea64.exe.vmoptions文件及解决coding卡顿用idea软件同时打开多个项目时,过个几天不关闭,就慢慢陷入卡
- 目录引言API介绍1、Optional(),empty(),of(),ofNullable()2、orElse(),orElseGet()和
- 本文实例为大家分享了Android实现下载文件的具体代码,供大家参考,具体内容如下1.实现效果直接上图: 2.代码实现在AndroidMan
- Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合。通过Ribbon,程序员能在不涉及到具
- 运行结果:模拟器图库就三张 没办法~画质挺感人~一个隐式意图布局文件:<RelativeLayout xmlns:android=&q
- 目录前言线程基础1、创建线程2、暂停线程3、线程等待4、线程终止C#中的lock关键字总结前言最近由于工作的需要,一直在使用C#的多线程进行
- 示例接口定义为了方便笔者先自己写了个简单的接口用于展示,返回当前时间,具体如下/// <summary>/// GetToday
- 这周末体验了一下挺火的Docker技术,记录学习笔记。>Docker是干什么的Docker 是一个基于Linux容器(LXC-linu
- 概述在Java环境下创建定时任务有多种方式:使用while循环配合 Thread.sleep(),虽然稍嫌粗陋但也勉强可用使用 Timer和
- 什么是tcpTcp通信有两个特点分别是面向连接,具有可靠性.面向连接:指的是客户端与服务端之间的连接,在通信之前会有三次握手的机制来确保连接
- 本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下创作背景:n年前的学期末课题设计,从b站上学的,一个代码一
- 在使用ComboBox控件时,遇到了重新绑定赋值出问题的情况。正常情况下,对于数据重新赋值的或者绑定数据源的时候,为了防止数据出现问题,都会
- 游戏介绍:拼图游戏是一款经典的益智游戏,游戏难度分为 简单、正常、困难 三种难度,分别对应3*3,4*4,5*5布局,游戏开始前图片被随机打
- 一、背景假如:黑客黑进了数据库,或者离职人员导出了数据,那么就可能导致这些敏感数据的泄漏。因此我们就需要找到一种方法来解决这个问题。二、解决
- 前言古语有云:道为术之灵,术为道之体;以道统术,以术得道。其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是
- Mybatis mapper模糊查询语句LIKE最近做学校安排的课程设计作业,用到SSM框架,在自己写mapper代码是遇到了模糊查询的问题