@OneToMany
Order.java
- package com.entity;
- import java.io.Serializable;
- import java.util.Date;
- import java.util.HashSet;
- import java.util.Set;
- import javax.persistence.CascadeType;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToMany;
- import javax.persistence.OrderBy;
- import javax.persistence.Table;
- import javax.persistence.Temporal;
- import javax.persistence.TemporalType;
- @Entity
- @Table(name = "Orders")
- public class Order implements Serializable {
- private Integer orderid;//订单号
- private Float amount;//订单金额
- private Set<OrderItem> orderItems = new HashSet<OrderItem>();//订单项
- private Date createdate;//订单创建日期
- @Id
- @GeneratedValue
- public Integer getOrderid() {
- return orderid;
- }
- public void setOrderid(Integer orderid) {
- this.orderid = orderid;
- }
- @Column(name="amount")//name: 映射的列名,如果不指定映射列名,容器默认将属性名称作为的映射的数据库表列名。
- public Float getAmount() {
- return amount;
- }
- public void setAmount(Float amount) {
- this.amount = amount;
- }
- /*
- * @OneToMany: 指明Order 与OrderItem关联关系为一对多关系
- *
- * mappedBy: 定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,
- * 否则可能引起数据一致性的问题。
- *
- * cascade: CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,
- * 而且这种关系是递归调用的。举个例子:Order 和OrderItem有级联关系,那么删除Order 时将同时删除它所对应的OrderItem对象。
- * 而如果OrderItem还和其他的对象之间有级联关系,那么这样的操作会一直递归执行下去。cascade的值只能从CascadeType.PERSIST(级联新建)、
- * CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。
- * 还有一个选择是使用CascadeType.ALL,表示选择全部四项。
- *
- * fatch: 可选择项包括:FetchType.EAGER 和FetchType.LAZY。前者表示关系类(本例是OrderItem类)在主类(本例是Order类)加载的时候
- * 同时加载;后者表示关系类在被访问时才加载,默认值是FetchType. LAZY。
- *
- */
- @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
- @OrderBy(value = "id ASC")//注释指明加载OrderItem时按id的升序排序
- public Set<OrderItem> getOrderItems() {
- return orderItems;
- }
- public void setOrderItems(Set<OrderItem> orderItems) {
- this.orderItems = orderItems;
- }
- //@Temporal注释用来指定java.util.Date 或java.util.Calendar 属性与数据库类型date,time 或timestamp 中的那一种类型进行映射
- @Temporal(value = TemporalType.TIMESTAMP)
- public Date getCreatedate() {
- return createdate;
- }
- public void setCreatedate(Date createdate) {
- this.createdate = createdate;
- }
- /*
- * 添加订单
- */
- public void addOrderItem(OrderItem orderitem) {
- if (!this.orderItems.contains(orderitem)) {
- this.orderItems.add(orderitem);
- orderitem.setOrder(this);
- }
- }
- /*
- * 删除订单
- */
- public void removeOrderItem(OrderItem orderitem) {
- orderitem.setOrder(null);
- this.orderItems.remove(orderitem);
- }
- }
OrderItem.java
- package com.entity;
- import java.io.Serializable;
- import javax.persistence.CascadeType;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.Table;
- @Entity
- @Table(name = "OrderItems")//name = "OrderItems",表示本实体对应数据库表 OrderItems,可选。
- public class OrderItem implements Serializable {
- private Integer id;//作为主键
- private String productname;//产品名称
- private Float price;//价格
- private Order order;//对应的订单
- /*
- * 无参数构造器可别忘了
- */
- public OrderItem() {
- }
- /*
- * 带参数的构造器,用于初始化实例变量
- */
- public OrderItem(String productname, Float price) {
- this.productname = productname;
- this.price = price;
- }
- @Id
- @GeneratedValue
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- @Column(name="productname")
- public String getProductname() {
- return productname;
- }
- public void setProductname(String productname) {
- this.productname = productname;
- }
- @Column(name="price")
- public Float getPrice() {
- return price;
- }
- public void setPrice(Float price) {
- this.price = price;
- }
- /*
- * @ManyToOne指明OrderItem和Order之间为多对一关系,多个OrderItem实例关联的都是同一个Order对象。
- * 其中的属性和@OneToMany基本一样,但@ManyToOne注释的fetch属性默认值是FetchType.EAGER。
- *
- * optional 属性是定义该关联类对是否必须存在,值为false时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。
- * 值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。
- * optional 属性的默认值是true。举个例:某项订单(Order)中没有订单项(OrderItem),如果optional 属性设置为false,
- * 获取该项订单(Order)时,得到的结果为null,如果optional 属性设置为true,仍然可以获取该项订单,但订单中指向订单项的属性为null。
- * 实际上在解释Order 与OrderItem的关系成SQL时,optional 属性指定了他们的联接关系optional=false联接关系为inner join,
- * optional=true联接关系为left join。
- *
- * @JoinColumn:指明了被维护端(OrderItem)的外键字段为order_id,它和维护端的主键(orderid)连接,unique= true 指明order_id列的值不可重复。
- */
- @ManyToOne(cascade = CascadeType.REFRESH, optional = false)
- @JoinColumn(name = "order_id",referencedColumnName="orderid")
- public Order getOrder() {
- return order;
- }
- public void setOrder(Order order) {
- this.order = order;
- }
- }
@OneToMany的更多相关文章
- 10.Configure One-to-Many(配置一对多关系)【Code-First系列】
现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...
- Hibernate @OneToMany等注解设置查询过滤条件等
1.如实体PdOrg对象中有users对象,数据库user表有字段DEL_FLAG(0:删除:1:未删除): private List<User> users= new ArrayList ...
- Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例
双边关系是最常见的配置.在多方有一方的引用,一方也有多方的引用.双边关系能够很方便地查询数据.看一个班级与学生的双边关系. 班级(Clazz类)与学生(Student类):一对多关系.班级中有学生属性 ...
- Hibernate实体关系映射(OneToMany单边)——完整实例
单边一对多关系:电子邮件管理 单边一对多关系:指一方有集合属性,包含多个多方,而多的一方没有一方的引用. 比如:用户(一)与电子邮件(多).一个用户可以有多个电子邮件记录. 目的:通过OneToMan ...
- JPA(Hibernate) @OneToMany 两种例子
环境:Spring Data Jpa,hibernate或者其他jpa实现也是一样的:Spring Boot 场景:User和Role,一个User要对应多个Role. 第一种方式,没有中间关系表,直 ...
- 转@OneToMany或@ManyToOne的用法-annotation关系映射篇(上)
原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdm.html 例如我们用一个例子来开启JPA的一对多和多对一的学习. 比如你去当当网上买书籍,当当网就 ...
- Hibernate @OneToMany 一对多注解
配置一 @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="fatherID") //对应儿子类的哪个字段 子类中配置Man ...
- jpa OneToMany
Project, project_id @OneToMany(mappedBy = "project") private Set<Ap> apSet =new Hash ...
- hibernate基于注解的维护权反转:@OneToMany(mappedBy=)
背景说明:首先是SSH环境下,对象基于注解的方式映射到数据库: 昨天遇到一个比较纠结的问题,@OneToMany(mappedBy="xxx"), mappedBy属性有什么用,然 ...
- JPA oneToMany 级联更新
oneToMany 使用: 示例:Employee与Phone为例. 1.类定义如下: package com.vrvwh.wh01.domain; import javax.persistence. ...
随机推荐
- python暴力破解wifi密码程序
import time # 破解wifi库 import pywifi from pywifi import const class PoJie(object): def __init__(self, ...
- Java中的线程--线程中的工具
这主要想写一下Java中的jdk提供的一些线程中的工具, 一.semaphore信号灯 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制,使用Semaphore可以控制同时访问资源的 ...
- javaEE(4)_response、request对象
一.简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应 ...
- java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础 SWT的激活方法,swt开发包下载,及破解激活码
补充聊天项目功能,做如下需求分析: 梳理项目开发所需的必要Java知识基础 GUI将使用更快速的swt实现 SWT(Standard Widget Toolkit) Standard Widget T ...
- PAT 乙级 1033
题目 题目地址:PAT 乙级 1033 题解 本题一直有一分的样例点过不了,原因在于用了cin接收输入的字符…… 问题在于:如果用cin输入,无法接收无坏键的情况的输入,需要getline作为输入:这 ...
- Ubuntu 下的aegisub安装
大家用开源的软件用习惯了.推荐大家使用一下字幕编辑软件 分享的是Ubuntu下的安装教程: $ sudo add-apt-repository ppa:djcj/aegisub $ sudo apt- ...
- Linux-实现双主模型的nginx的高可用
实现双主模型的ngnix高可用(一) 准备:主机7台 client: 172.18.x.x 调度器:keepalived+nginx 带172.18.x.x/16 网卡 192.168.234.27 ...
- css兼容处理-hack
浏览器兼容之旅的第二站:各浏览器的Hack写法 Browser CSS Hacks Moving IE specific CSS into @media blocks Detecting browse ...
- FSHC之MCU接口部分理解
|_____________| |_____| |__ ...
- 数据结构( Pyhon 语言描述 ) — — 第3章:搜索、排序和复杂度分析
评估算法的性能 评价标准 正确性 可读性和易维护性 运行时间性能 空间性能(内存) 度量算法的运行时间 示例 """ Print the running times fo ...