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;
}
}
原文地址:http://lym6520.iteye.com/blog/312125
分享到:
相关推荐
基于HIBERNATE 操作表的关系练习例子
onetomany-hibernate在myeclipse下的使用开发hibernate程序
hibernate对象三状态及OneToOne&OneToMany&ManyToMany讲解,代码示例,数据库示例!非常全面
NULL 博文链接:https://fqh1987.iteye.com/blog/791845
一对多Nosql演示与OneToMany关系中的MongoDB的Spring Data演示项目 该项目是我发表的文章的来源。 请以下文章的链接:
JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程
一对多 @OneToMany 注解可定义一对多关联。一对多关联可以是双向的。 双向 规范中多对一端几乎总是双向关联中的主体(owner)端,而一对多的关联注解为 @OneToMany(mappedBy=)
通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; ...
o @OneToMany o @OneToOne o @OrderBy • P o @PersistenceContext o @PersistenceContexts o @PersistenceProperty o @PersistenceUnit o @PersistenceUnits o @PrimaryKeyJoinColumn o @PrimaryKeyJoinColumns • ...
双向 @OneToMany(mappeBy="") 关系交给对方维护 3多对多 @ManyToMany-->代表多对多 @ManyToMany(mappeBy="")mappeBy-->通过此属性把关系交给对方维 注意:一般出现多对多的情况时,我们会把多对多分解成2个一对...
从抽象类定义实体: @Entity abstract class AbstractPerson { @Key @Generated int id; @Index ( " name_index " ) // table specification String name; @OneToMany // relationships 1:1, 1:many, many to ...
0.0.1-SNAPSHOT.jar运行前端: ng serve -o文件Github项目-https: 主要困难业务/域规则,已多次更改在后端建立关系@OneToMany-@ManyToOne 后端全球CORS 后端验证组织Dockerfile和docker-compose.yml
1.实体关系 Spring Boot和JPA @OneToMany和@ManyToOne的示例(处理无限递归,请参见[1.1]) 使用jUnit进行基本测试的示例 1.1。 JsonManagedReference和JsonBackReference 从Jackson 1.6开始,您可以使用两个...
弹簧过滤器您需要一种无需任何努力即可动态过滤实体的方法吗? 只需将我添加到您的pom.xml 。 您的API将获得功能全面的搜索功能。 您不使用API吗? 没问题,您可能仍然不想弄乱SQL,JPA谓词,安全性以及所有这些...
Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id;...映射实体Bean的关联关系 一对一 使用 @OneToOne...
@OneToMany(mappedBy 相当于 inverse ) @ManyToOne 结合 @JoinColumn 添加一列外键 @ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台...
EJB基本知识介绍。如OneToOne,OneToMany等经典实例推荐
PrimaryGeneratedColumn ( 'uuid' ) id : string @ Column ( { nullable : true } ) name : string @ Column ( { type : 'varchar' , length : 100 , nullable : false } ) password : string @ OneToMany ( ( type ...
在已有的 项目基础上,使用JPA的@OneToMany注解实现Company和Employee是一对多的关系,实现级联删除,查询 要求使用Flyway命令对数据进行迁移 要求实现下述RESTful API Company API GET /companies #获取company列表...
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) ...cascade表示级联操作,在hibernate配置注解@OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。 例如: @ManyToOne(c