@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. ...
随机推荐
- swift中使用sqlite3
import Foundation /** 1. 打开数据库 2. 如果没有数据表,需要首先创表 3. 数据操作 */ class SQLite { var db: COpaquePointer = ...
- HDU-1241-油藏
这题一道深搜的简单题目,其实题目的思路就只是向八个方向搜索,然后把整个油田遍历一遍即可. #include <cstdio> #include <cstring> int ma ...
- 【tarjan 拓扑排序 dp】bzoj1093: [ZJOI2007]最大半连通子图
思维难度不大,关键考代码实现能力.一些细节还是很妙的. Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于 ...
- (2)zabbix硬件需求
1. 硬件需求 无非就是cpu.内存.硬盘之类的1.1 CPU由你的zabbix数据库使用情况来做决定,如果你监控的项目越多,那你的cpu要越好.具体多好,下面有个表格 1.2 内存与硬盘最基本的需求 ...
- GIMP的Path的import和export
点击Path栏中的小三角,选择Paths Menu,然后点击Export Path Import Path自然不必多说:
- python爬虫入门六:Selenium库
在我们爬取网页过程中,经常发现我们想要获得的数据并不能简单的通过解析HTML代码获取,这些数据是通过AJAX异步加载方式或经过JS渲染后才呈现在页面上显示出来. selenuim是一种自动化测试工具, ...
- 菜鸟的《Linux程序设计》学习——MySQL数据库安装、配置及基本操作
1. MySQL数据库: 在涉及到一些大型的Web系统或者嵌入式软件的开发时,都少不了用数据库来管理数据.在Windows操作系统下,使用过各种各样的数据库,如:sqlServer.Oracle.My ...
- Aizu-ALDS1_3_A:Stack
D - Stack Write a program which reads an expression in the Reverse Polish notation and prints the co ...
- python常见陷阱
copy to https://pythonguidecn.readthedocs.io/zh/latest/writing/gotchas.html 大多数情况下,Python的目标是成为一门简洁和 ...
- Thymeleaf模板引擎+Spring整合使用方式的介绍
尊重原创,原文地址为:https://www.cnblogs.com/jiangchao226/p/5937458.html 前言 这个教程介绍了Thymeleaf与Spring框架的集成,特别是Sp ...