日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate多对多,转换为两个一对多

發布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate多对多,转换为两个一对多 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

例如,現在有商品表,訂單表,兩者是多對多的關系,

--訂單表
create table ORDERS
(
ID NUMBER(8) not null,
TOTAL NUMBER(8,2) not null,
CREATED_DATE VARCHAR2(40) not null,
REALNAME VARCHAR2(20),
TELPHONE VARCHAR2(20),
MOBILE NUMBER(20),
ADDRESS VARCHAR2(200) not null,
POSTCODE VARCHAR2(12),
STATE NUMBER(1),
ACCOUNT_ID VARCHAR2(40),
PAYMENT_ID NUMBER(4),
DELIVERY_ID NUMBER(4),
PAYMENT_STATE NUMBER(1),
MEMO VARCHAR2(400)
)

--商品表

create table PRODUCT
(
ID NUMBER(8) not null,
NAME VARCHAR2(200) not null,
CREATED_DATE VARCHAR2(40),
DESCRIPTION VARCHAR2(4000),
IMAGEURL VARCHAR2(200),
PRICE NUMBER(6,2) not null,
STOCK NUMBER(8),
STATE NUMBER(1) not null,
CATEGORY_ID NUMBER(4) not null,
DISCOUNT NUMBER(2)
)

--中間表

create table ORDERITEM
(
ORDER_ID NUMBER(8),
PRODUCT_ID NUMBER(8),
ORIGIN_PRICE NUMBER(6,2),
PRICE NUMBER(6,2),
QUANTITY NUMBER(6),
ID VARCHAR2(40) not null
)

傳統的多對多映射會在order.hbm.xml中這樣設置:

<set name="products"table="orderitem">
<keycolumn="order_id"></key>
<many-to-manyclass="com.shop.model.Product">
<columnname="product_id"></column>
</many-to-many>
</set>

但是,此時中間表orderitem中多了三個字段,此時就不能用上面這種方法了,

那么就可以轉化成兩個一對多(或者說兩個多對一)

步驟:

1.生成orderitem的POJO類,并改造成如下內容:

public class Orderitem implementsjava.io.Serializable {

// Fields

private String id;
private Double originPrice;
private Double price;
private Long quantity;
private Order order;
private Product product;

// Constructors


public Orderitem() {
}

// Property accessors

public String getId() {
return this.id;
}

public void setId(String id) {
this.id = id;
}

public Double getOriginPrice() {
return this.originPrice;
}

public void setOriginPrice(Double originPrice){
this.originPrice = originPrice;
}

public Double getPrice() {
return this.price;
}

public void setPrice(Double price) {
this.price = price;
}

public Long getQuantity() {
return this.quantity;
}

public void setQuantity(Long quantity) {
this.quantity = quantity;
}

public Order getOrder() {
return order;
}

public void setOrder(Order order) {
this.order = order;
}

public Product getProduct() {
return product;
}

public void setProduct(Product product) {
this.product = product;
}

2.配置映射文件

<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.shop.model.Orderitem"table="ORDERITEM" schema="STORE">
<id name="id"type="java.lang.String">
<column name="ID" length="10"/>
<generatorclass="uuid.hex"></generator>
</id>
<property name="originPrice"type="java.lang.Double">
<column name="ORIGIN_PRICE" precision="6"/>
</property>
<property name="price"type="java.lang.Double">
<column name="PRICE" precision="6"/>
</property>
<property name="quantity" type="java.

lang.Long">
<column name="QUANTITY" precision="6" scale="0"/>
</property>

<many-to-one name="order"class="com.shop.model.Order"
cascade="save-update" >
<columnname="order_Id"></column>
</many-to-one>
<many-to-one name="product"class="com.shop.model.Product">
<columnname="product_Id"></column>
</many-to-one>
</class>
</hibernate-mapping>

3.接下來就變成多對一事務操作了(當然,從另一個方向看,就是一對多了) 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的hibernate多对多,转换为两个一对多的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。