@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. ...
随机推荐
- Burpsuite1.7.03网站渗透神器最新破解版
众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作. 平台中所有工具 ...
- CPP-STL:STL备忘
STL备忘(转) 1. string.empty() 不是用来清空字符串,而是判断string是否为空,清空使用string.clear(); 2. string.find等查找的结果要和string ...
- Vue的安装并在WebStorm中运行
一.Vue的安装需要两个支持分别为:nodejs.npm Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- ios设备屏幕尺寸与分辨率
iOS 设备的屏幕尺寸.分辨率及其屏幕边长比例详细情况是怎样的? 根据屏幕尺寸和分辨率,ios现在数起来有6个版本.一,3GS:二,4s为代表:三,iphone5:四,ipad2为代表:五,ipad4 ...
- 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)
1.JDK安装 在我的部署单节点kafka的博客里有相关的方法.(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的 ...
- 【二分】bestcoder p1m2
模型的转化和二分check的细节挺不错的 Problem Description 度度熊很喜欢数组!! 我们称一个整数数组为稳定的,若且唯若其同时符合以下两个条件: 数组里面的元素都是非负整数. 数组 ...
- windows 7虚拟机与主机不能互ping通,但是都能与网关ping通
这里是在Windows 10的环境下使用VMware安装了一个Windows 7的虚拟机,虚拟机中是使用桥接的方式.结果发现虚拟机不能与物理机互通,但是却能与网关互通.查看虚拟机和物理机的IP发现都是 ...
- linux各种终端类型的区别和概念
1 pty(虚拟终端或伪终端): 当我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty). 2 tty(终端设备的统称):tty一词源 ...
- node.js---对文件操作
1. var fs=require('fs'); fs.open(path,flag,[mode],callback); path:要打开的文件路径 flags:要打开文件的方式 读/写 mode:设 ...
- 牛客网暑期ACM多校训练营(第四场)G Maximum Mode(思维)
链接: https://www.nowcoder.com/login?callBack=%2Facm%2Fcontest%2F142%2FG 题意: 给定n个数, 要求删去恰好m个数后的最大总数是多少 ...