例如,现在有商品表,订单表,两者是多对多的关系,

--订单表
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.接下来就变成多对一事务操作了(当然,从另一个方向看,就是一对多了)

hibernate多对多,转换为两个一对多相关推荐

  1. hibernate多对多映射拆成2个一对多映射(注解)

    hibernate的many to many确实很是方便我们处理实体和集合间的关系,并可以通过级联的方法处理集合,但有的时候many to many不能满足我们的需要,比如 用户<---> ...

  2. hibernate 多对多(many-to-many)

    多对多(many-to-many):在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 1. E- ...

  3. hibernate多对多、正向工程创建数据表——访问温馨提示

    大家都知道,hibernate可以反向生成实体类以及配置文件,但是正向的可能做的人并不是很多,什么是正向,什么是反向呢,正向指的是先有了实体类(entity),然后在根据你的实体类通过hibernat ...

  4. Hibernate多对多映射 - 连接表

    Hibernate多对多映射 - 连接表 今天我们将使用XML和注释配置来研究Hibernate多对多映射.之前我们看过如何在Hibernate中实现One To One和One To Many映射. ...

  5. Hibernate 多对多关系实现

    2019独角兽企业重金招聘Python工程师标准>>> 一般情况下,多对多的关联关系是需要中间表的: 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用Many ...

  6. Hibernate多对多关系配置

    需求:一个用户可以有多个角色,一个角色也可以被多个用户选择 POJO: public class User {private Long user_id;private String user_code ...

  7. myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)

    myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...

  8. myeclipse试用小记----Hibernate多对一双向关联(2)

    myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...

  9. hibernate多对一单向外键

    hibernate多对一单向外键: 描述: 转载于:https://www.cnblogs.com/blogofwyl/p/5402197.html

最新文章

  1. Linux socket TIME_WAIT 优化
  2. tftp 在线更新 cisco switch IOS
  3. python 分析html_用python的BeautifulSoup分析html
  4. 青岛智能院助力智慧城市 打造智能产业“黄埔军校”
  5. 项目周期一般多久_深圳app开发公司的软件开发要多久?
  6. 2017交大计算机专业分数线,2017上海交大录取分数线历年录取分(2)
  7. Scratch 3.0 指令大全-“运动”类别的详细介绍②
  8. SpreadJS v14.1.5 Crack
  9. wifi模块连接远程服务器,ESP8266 WIFI 模块与 Arduino 串口通信实现远程控制
  10. python随机生成电话号码
  11. Python笔记-类和实例、继承和多态
  12. NTVDM遇到一个硬错误
  13. CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲
  14. Mybatis Could not find SQL statement to include with refid ‘xxx‘的问题
  15. echarts 折线图高于目标显示绿色低于目标显示红色
  16. 自考本科推荐计算机考研学校,过来人谈考研:一个自考本科生的考研成功自述...
  17. Presto安装与使用
  18. 2023年全国最新会计专业技术资格精选真题及答案8
  19. 7-38 支票面额 (15 分) 一个采购员去银行兑换一张y元f分的支票,结果出纳员错给f元y分。采购员用去n分后发觉有错,余额有2y元2f分,问支票面额?PTA:中M2021春C、Java入门练习I
  20. 最大化利用手中RouterBOARD路由器实现交换机功能

热门文章

  1. 【Git】IntelliJ IDEA 提交代码到 GitCode 远程仓库 ( GitCode 创建远程仓库 | 将本地工程推送到 GitCode 远程仓库 | 验证权限 | 生成个人访问令牌 )
  2. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )
  3. 【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )
  4. 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
  5. python -yield理解
  6. 消息确认机制---confirm异步
  7. Android重写FragmentTabHost来实现状态保存
  8. 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
  9. Excel加密的Sheet如何hack
  10. iOS夯实:RunLoop