Hibernate雙向多對多映射關(guān)系配置代碼實(shí)例
1、實(shí)體類
package com.yl.bean; import java.io.Serializable; import java.util.Set; /** * 商品實(shí)體類 */ public class Goods implements Serializable { private Integer id;//商品id private String goodsName;//商品名 private Double price;//商品價(jià)格 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; /** * 商品訂單實(shí)體類 */ public class GoodsOrder implements Serializable { private Integer id;//訂單id private String orderNo;//訂單編號(hào) private Double price;//訂單價(jià)格 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> <!--數(shù)據(jù)源配置--> <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> <!--自動(dòng)創(chuàng)建表--> <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> <!--多對多關(guān)系映射--> <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> <!--多對多關(guān)系映射--> <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("為發(fā)燒而生"); 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); //注意這里,只需要一方關(guān)聯(lián)即可(上面已經(jīng)關(guān)聯(lián)了,所以不需要再次添加商品集合),兩方關(guān)聯(lián)會(huì)造成主鍵重復(fù),報(bào)錯(cuò) // 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(); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Hibernate雙向一對一映射關(guān)系配置代碼實(shí)例
- Hibernate基于ThreadLocal管理Session過程解析
- 淺談hibernate中懶加載禁用操作
- 解決spring boot hibernate 懶加載的問題
- springboot 2.3之后消失的hibernate-validator解決方法
- Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟
- Spring+SpringMVC+Hibernate整合實(shí)例講解
- Hibernate傳入Java對象創(chuàng)建動(dòng)態(tài)表并錄入數(shù)據(jù)
相關(guān)文章
SpringBoot異常錯(cuò)誤頁面實(shí)現(xiàn)方法介紹
在項(xiàng)目訪問的時(shí)候我們經(jīng)常會(huì)發(fā)生錯(cuò)誤或者頁面找不到,比如:資源找不到404,服務(wù)器500錯(cuò)誤,默認(rèn)情況下springboot的處理機(jī)制都是去跳轉(zhuǎn)內(nèi)部的錯(cuò)誤地址:/error 和與之對應(yīng)的一個(gè)錯(cuò)誤頁面2022-09-09Mybatis使用foreach標(biāo)簽實(shí)現(xiàn)批量插入方式
這篇文章主要介紹了Mybatis使用foreach標(biāo)簽實(shí)現(xiàn)批量插入方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03springboot新建項(xiàng)目pom.xml文件第一行報(bào)錯(cuò)的解決
這篇文章主要介紹了springboot新建項(xiàng)目pom.xml文件第一行報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Maven入門之使用Nexus搭建Maven私服及上傳下載jar包
這篇文章主要介紹了Maven入門之使用Nexus搭建Maven私服及上傳下載jar包,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Java構(gòu)造函數(shù)里的一些坑記錄super()和this()
這篇文章主要介紹了Java構(gòu)造函數(shù)里的一些坑記錄super()和this(),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Springboot 使用內(nèi)置tomcat禁止不安全HTTP的方法
這篇文章主要介紹了Springboot 使用內(nèi)置tomcat禁止不安全HTTP的方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Spring AOP + 注解實(shí)現(xiàn)統(tǒng)一注解功能
本文我們通過Spring AOP和Java的自定義注解來實(shí)現(xiàn)日志的插入功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友一起看看吧2018-05-05Java?C++題解leetcode消失的兩個(gè)數(shù)字實(shí)例
這篇文章主要介紹了Java?C++題解leetcode消失的兩個(gè)數(shù)字實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09AQS(AbstractQueuedSynchronizer)抽象隊(duì)列同步器及工作原理解析
AQS是用來構(gòu)建鎖或者其他同步器組件的重量級(jí)基礎(chǔ)框架及整個(gè)JUC體系的基石,通過內(nèi)置的FIFO對列來完成資源獲取線程的排隊(duì)工作,并通過一個(gè)int類型變量表示持有鎖的狀態(tài),本文給大家詳細(xì)介紹下AQS抽象隊(duì)列同步器的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-03-03