博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate一对多配置
阅读量:6798 次
发布时间:2019-06-26

本文共 2744 字,大约阅读时间需要 9 分钟。

前言:在java的世界中万事万物皆对象,而在一个工程中往往是涉及到多个对象。那么在处理多个对象之间的关系显得尤为重要,对象关系大致可以分为四种。一对一、一对多、多对一、多对多,而一对一无需多讲,一对多与多对一则是考虑的角度问题,其本质都是一样的,最后多对多也是可以拆分为一对多的关系。本例讲解一个订单与订单明细的例子便属于一个典型的一对多关系。

需求:本例需要做一个饭馆管理客户小型的点餐系统,主要是管理客户订单。

误区:对于面向对象编程语言的初学者来说建模时可能会定义一个订单对象包含订单编号,订单日期,订单人数,所定菜名,份数,价格等属性的一个对象。

正解:此处应分为两个对象,一个订单对象(订单号,人数,日期,等)一个订单明细对象(所定菜名,份数,价格等)。因为一个对象与属性的关系应该是十分紧密的,比如说菜的价格是与菜关联的并没有与订单存在直接关系。一个客户(订单对象)可能会点多个菜(订单明细对象),这便是我们问题的引入点。

一对多配置方式一、使用jpa注解

首先看一下我们one端,也就是订单对象端部分代码

1 import java.util.Date; 2 import java.util.HashSet; 3 import java.util.Set; 4  5 import javax.persistence.CascadeType; 6 import javax.persistence.Column; 7 import javax.persistence.Entity; 8 import javax.persistence.FetchType; 9 import javax.persistence.GeneratedValue;10 import javax.persistence.GenerationType;11 import javax.persistence.Id;12 import javax.persistence.OneToMany;13 import javax.persistence.Table;14 15 @Entity16 @Table(name = "t_order")17 public class Order {18 19     @Id20     @GeneratedValue(strategy=GenerationType.IDENTITY)21     private Integer id;// 主键22     @Column(name="p_Count",nullable=false)23     private Integer pCount;// 人数24     @Column(name="pub_Date",nullable=false)25     private Date pubDate;//日期26     27     private Set
orderItems = new HashSet
();28 29 @OneToMany(mappedBy="order",cascade={CascadeType.ALL},fetch=FetchType.EAGER)30 public Set
getOrderItems() {31 return orderItems;32 }

接下是我们的 many端

1 @Entity 2 @Table(name = "t_order_item") 3 public class OrderItem { 4  5     @Id 6     @GeneratedValue(strategy=GenerationType.IDENTITY) 7     private Integer id;//主键 8     @Column(name="detail_desc",nullable=false,length=50) 9     private String detailDesc;//菜名10     @Column(name="price",nullable=false)11     private Integer price;//单价12     @Column(name="c_count",nullable=false)13     private Integer cCount;//数量14     15     private Order order;16     17     @ManyToOne(cascade={CascadeType.REMOVE},optional=true,fetch=FetchType.EAGER)18     @JoinColumn(name="orderid")

解析:hibernate主要通过onetomany和manytoone这两个注解建立起订单表与订单明细表的主外键引用关系。主表对象通过定义set集合存放从表对象,从表定义一个属性为主表对象,从而使两个对象关联起来。

一对多配置方式二、使用xml配置

1 
2 5 6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 
2
3
4
5
6 ...7
8
9

总结:java程序中的对象,数据库中的表,这两者在设计中往往存在不同步状况,建好一个项目中的模显得尤为重要。

转载于:https://www.cnblogs.com/1016882435AIDA/p/6051273.html

你可能感兴趣的文章
9.0 alpha 版安装出现 could not execute command lessc 的问题
查看>>
SIP入门(二):建立SIPserver
查看>>
html里的table如何在表格内部保留表格横线的同时去掉表格里的竖线
查看>>
老板必备:核心员工跳槽时,必聊的8个话题(转)
查看>>
TNS-00512: Address already in use-TNS-12542: TNS:address already in use
查看>>
什么是快速排序(转)
查看>>
会议论文重新投稿算不算侵权?这肯定是所多人都遇到过的问题。
查看>>
js判断checkbox状态,处理表单提交事件
查看>>
工程师,请优化你的代码
查看>>
BZOJ3495 : PA2010 Riddle
查看>>
探访莱布尼茨:与大师穿越时空的碰撞
查看>>
Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"
查看>>
如何削减高速语言?
查看>>
山寨游戏的未来Apple App Store
查看>>
JSON.parse()和JSON.stringify()
查看>>
python出现UnicodeEncodeError有可能产生的另一个原因
查看>>
域名绑定,解析总结
查看>>
JAVA 网络长短连接
查看>>
transform,transition,animation 的混合使用——进阶
查看>>
【网络流】 HDU 3468 Treasure Hunting
查看>>