@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. ...
随机推荐
- java 一个对象多少大,占用多少内存
1.instrumentation这种方法还是靠谱的 一个对象占用多少字节? 2.sizeof库 <!-- https://mvnrepository.com/artifact/com.carr ...
- shell脚本,如何写进度条。
[root@localhost ~]# cat jindutiao.sh #!/bin/bash #进度条 n=$((/)) N=$((/)) ` do sleep 0.01 [ $(($i%$n)) ...
- javaEE(8)_EL表达式语言
一.EL表达式简介 EL全名为Expression Language.EL主要作用: 1>获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象. ...
- 基于IMD的包过滤防火墙原理与实现
一.前言二.IMD中间层技术介绍三.passthru例程分析四.部分演示代码五.驱动编译与安装六. 总结 一.前言 前段时间,在安全焦点上看到了TOo2y朋友写的<基于SPI的数据报过滤原理与实 ...
- IAP介绍
iOS应用调置 wjforstudy分享了IAP的一些基本知识.在论坛的地址是:http://www.cocoachina.com/bbs/read.php?tid=92060 1.在开始IAP开发 ...
- Swift 编程思想 Part 4:map all the things!
Swift 编程思想 Part 4:map all the things! 2015-10-22 837 文章目录 1. 数组 vs. 可选类型 2. 作用在可选类型上的 map() 3. 回到我们 ...
- xhEditor编辑器上传图片到 OSS
前段时间,公司在项目上用到了xhEditor编辑器来给用户做一个上传图片的功能当时做的时候觉得很有意思,想想 基本的用户图片上传到自己服务器,还有点小占地方: 后来....然后直接上传到阿里云 .接下 ...
- 解读tensorflow之rnn【转】
转自:https://blog.csdn.net/mydear_11000/article/details/52414342 from: http://lan2720.github.io/2016/0 ...
- [OpenJudge] 2727 仙岛寻药
2727:仙岛求药 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进 ...
- Elementary OS上eclipse卡死问题
解决: 1.可以用 sudo ./eclipse -vm /home/username/jdk_path/bin/java 启动但是启动后仍有显示问题. 2. 修改 eclipse.ini 在 -- ...