Hibernate双向多对多映射关系配置代码实例

作者:Y_wee 时间:2022-12-26 22:30:30 

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&amp;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

标签:Hibernate,双向,多对多,映射,配置
0
投稿

猜你喜欢

  • 通过Java连接SQL Server数据库的超详细操作流程

    2022-08-01 12:46:01
  • java使用influxDB数据库的详细代码

    2023-03-04 05:22:27
  • Java中BigDecimal的舍入模式解析(RoundingMode)

    2021-10-16 15:28:16
  • Java排序之冒泡排序的实现与优化

    2023-11-10 21:35:56
  • Android 中ScrollView嵌套GridView,ListView的实例

    2023-06-15 15:49:56
  • 详解SpringBoot和SpringBatch 使用

    2023-08-17 19:00:38
  • Java编程Webservice指定超时时间代码详解

    2023-11-02 23:17:12
  • 快速学习六大排序算法

    2023-11-02 22:36:19
  • Java中的OkHttp使用教程

    2023-08-10 19:30:59
  • 关于重写equals()方法和hashCode()方法及其简单的应用

    2023-08-01 06:48:13
  • Android开发之自定义加载动画详解

    2023-07-27 01:41:05
  • java Mail邮件接收工具类

    2022-04-24 14:17:17
  • Mybatis-Spring源码分析图解

    2023-07-18 13:35:07
  • 如何通过SpringBoot实现商城秒杀系统

    2023-11-24 23:02:33
  • 简单的java图片处理类(图片水印 图片缩放)

    2022-04-02 03:24:37
  • Java实现经典游戏打砖块游戏的示例代码

    2021-06-25 13:30:16
  • 关于java中构造函数的一些知识详解

    2023-11-27 22:09:11
  • 解决Jackson解析嵌套类问题(MismatchedInputException)

    2023-07-26 03:09:31
  • 详解Lombok安装及Spring Boot集成Lombok

    2023-11-28 23:39:55
  • 详解SpringBoot修改启动端口server.port的四种方式

    2022-03-10 20:28:48
  • asp之家 软件编程 m.aspxhome.com