Order.java

  1. package com.entity;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. import java.util.HashSet;
  5. import java.util.Set;
  6. import javax.persistence.CascadeType;
  7. import javax.persistence.Column;
  8. import javax.persistence.Entity;
  9. import javax.persistence.FetchType;
  10. import javax.persistence.GeneratedValue;
  11. import javax.persistence.Id;
  12. import javax.persistence.OneToMany;
  13. import javax.persistence.OrderBy;
  14. import javax.persistence.Table;
  15. import javax.persistence.Temporal;
  16. import javax.persistence.TemporalType;
  17. @Entity
  18. @Table(name = "Orders")
  19. public class Order implements Serializable {
  20. private Integer orderid;//订单号
  21. private Float amount;//订单金额
  22. private Set<OrderItem> orderItems = new HashSet<OrderItem>();//订单项
  23. private Date createdate;//订单创建日期
  24. @Id
  25. @GeneratedValue
  26. public Integer getOrderid() {
  27. return orderid;
  28. }
  29. public void setOrderid(Integer orderid) {
  30. this.orderid = orderid;
  31. }
  32. @Column(name="amount")//name: 映射的列名,如果不指定映射列名,容器默认将属性名称作为的映射的数据库表列名。
  33. public Float getAmount() {
  34. return amount;
  35. }
  36. public void setAmount(Float amount) {
  37. this.amount = amount;
  38. }
  39. /*
  40. * @OneToMany: 指明Order 与OrderItem关联关系为一对多关系
  41. *
  42. * mappedBy: 定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,
  43. * 否则可能引起数据一致性的问题。
  44. *
  45. * cascade: CascadeType[]类型。该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,
  46. * 而且这种关系是递归调用的。举个例子:Order 和OrderItem有级联关系,那么删除Order 时将同时删除它所对应的OrderItem对象。
  47. * 而如果OrderItem还和其他的对象之间有级联关系,那么这样的操作会一直递归执行下去。cascade的值只能从CascadeType.PERSIST(级联新建)、
  48. * CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。
  49. * 还有一个选择是使用CascadeType.ALL,表示选择全部四项。
  50. *
  51. * fatch: 可选择项包括:FetchType.EAGER 和FetchType.LAZY。前者表示关系类(本例是OrderItem类)在主类(本例是Order类)加载的时候
  52. * 同时加载;后者表示关系类在被访问时才加载,默认值是FetchType. LAZY。
  53. *
  54. */
  55. @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  56. @OrderBy(value = "id ASC")//注释指明加载OrderItem时按id的升序排序
  57. public Set<OrderItem> getOrderItems() {
  58. return orderItems;
  59. }
  60. public void setOrderItems(Set<OrderItem> orderItems) {
  61. this.orderItems = orderItems;
  62. }
  63. //@Temporal注释用来指定java.util.Date 或java.util.Calendar 属性与数据库类型date,time 或timestamp 中的那一种类型进行映射
  64. @Temporal(value = TemporalType.TIMESTAMP)
  65. public Date getCreatedate() {
  66. return createdate;
  67. }
  68. public void setCreatedate(Date createdate) {
  69. this.createdate = createdate;
  70. }
  71. /*
  72. * 添加订单
  73. */
  74. public void addOrderItem(OrderItem orderitem) {
  75. if (!this.orderItems.contains(orderitem)) {
  76. this.orderItems.add(orderitem);
  77. orderitem.setOrder(this);
  78. }
  79. }
  80. /*
  81. * 删除订单
  82. */
  83. public void removeOrderItem(OrderItem orderitem) {
  84. orderitem.setOrder(null);
  85. this.orderItems.remove(orderitem);
  86. }
  87. }

OrderItem.java

    1. package com.entity;
    2. import java.io.Serializable;
    3. import javax.persistence.CascadeType;
    4. import javax.persistence.Column;
    5. import javax.persistence.Entity;
    6. import javax.persistence.GeneratedValue;
    7. import javax.persistence.Id;
    8. import javax.persistence.JoinColumn;
    9. import javax.persistence.ManyToOne;
    10. import javax.persistence.Table;
    11. @Entity
    12. @Table(name = "OrderItems")//name = "OrderItems",表示本实体对应数据库表 OrderItems,可选。
    13. public class OrderItem implements Serializable {
    14. private Integer id;//作为主键
    15. private String productname;//产品名称
    16. private Float price;//价格
    17. private Order order;//对应的订单
    18. /*
    19. * 无参数构造器可别忘了
    20. */
    21. public OrderItem() {
    22. }
    23. /*
    24. * 带参数的构造器,用于初始化实例变量
    25. */
    26. public OrderItem(String productname, Float price) {
    27. this.productname = productname;
    28. this.price = price;
    29. }
    30. @Id
    31. @GeneratedValue
    32. public Integer getId() {
    33. return id;
    34. }
    35. public void setId(Integer id) {
    36. this.id = id;
    37. }
    38. @Column(name="productname")
    39. public String getProductname() {
    40. return productname;
    41. }
    42. public void setProductname(String productname) {
    43. this.productname = productname;
    44. }
    45. @Column(name="price")
    46. public Float getPrice() {
    47. return price;
    48. }
    49. public void setPrice(Float price) {
    50. this.price = price;
    51. }
    52. /*
    53. * @ManyToOne指明OrderItem和Order之间为多对一关系,多个OrderItem实例关联的都是同一个Order对象。
    54. * 其中的属性和@OneToMany基本一样,但@ManyToOne注释的fetch属性默认值是FetchType.EAGER。
    55. *
    56. * optional 属性是定义该关联类对是否必须存在,值为false时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。
    57. * 值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。
    58. * optional 属性的默认值是true。举个例:某项订单(Order)中没有订单项(OrderItem),如果optional 属性设置为false,
    59. * 获取该项订单(Order)时,得到的结果为null,如果optional 属性设置为true,仍然可以获取该项订单,但订单中指向订单项的属性为null。
    60. * 实际上在解释Order 与OrderItem的关系成SQL时,optional 属性指定了他们的联接关系optional=false联接关系为inner join,
    61. * optional=true联接关系为left join。
    62. *
    63. * @JoinColumn:指明了被维护端(OrderItem)的外键字段为order_id,它和维护端的主键(orderid)连接,unique= true 指明order_id列的值不可重复。
    64. */
    65. @ManyToOne(cascade = CascadeType.REFRESH, optional = false)
    66. @JoinColumn(name = "order_id",referencedColumnName="orderid")
    67. public Order getOrder() {
    68. return order;
    69. }
    70. public void setOrder(Order order) {
    71. this.order = order;
    72. }
    73. }

@OneToMany的更多相关文章

  1. 10.Configure One-to-Many(配置一对多关系)【Code-First系列】

    现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...

  2. Hibernate @OneToMany等注解设置查询过滤条件等

    1.如实体PdOrg对象中有users对象,数据库user表有字段DEL_FLAG(0:删除:1:未删除): private List<User> users= new ArrayList ...

  3. Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例

    双边关系是最常见的配置.在多方有一方的引用,一方也有多方的引用.双边关系能够很方便地查询数据.看一个班级与学生的双边关系. 班级(Clazz类)与学生(Student类):一对多关系.班级中有学生属性 ...

  4. Hibernate实体关系映射(OneToMany单边)——完整实例

    单边一对多关系:电子邮件管理 单边一对多关系:指一方有集合属性,包含多个多方,而多的一方没有一方的引用. 比如:用户(一)与电子邮件(多).一个用户可以有多个电子邮件记录. 目的:通过OneToMan ...

  5. JPA(Hibernate) @OneToMany 两种例子

    环境:Spring Data Jpa,hibernate或者其他jpa实现也是一样的:Spring Boot 场景:User和Role,一个User要对应多个Role. 第一种方式,没有中间关系表,直 ...

  6. 转@OneToMany或@ManyToOne的用法-annotation关系映射篇(上)

    原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdm.html 例如我们用一个例子来开启JPA的一对多和多对一的学习. 比如你去当当网上买书籍,当当网就 ...

  7. Hibernate @OneToMany 一对多注解

    配置一 @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="fatherID") //对应儿子类的哪个字段 子类中配置Man ...

  8. jpa OneToMany

    Project, project_id @OneToMany(mappedBy = "project") private Set<Ap> apSet =new Hash ...

  9. hibernate基于注解的维护权反转:@OneToMany(mappedBy=)

    背景说明:首先是SSH环境下,对象基于注解的方式映射到数据库: 昨天遇到一个比较纠结的问题,@OneToMany(mappedBy="xxx"), mappedBy属性有什么用,然 ...

  10. JPA oneToMany 级联更新

    oneToMany 使用: 示例:Employee与Phone为例. 1.类定义如下: package com.vrvwh.wh01.domain; import javax.persistence. ...

随机推荐

  1. 验证IP端与数据库Ip端是否重复!!!

    select COUNT(id) from house_info_config hic where (hic.ip_start <![CDATA[<=]]> #{ipend} AND ...

  2. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键

    windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...

  3. MySQL开启日志跟踪

    在开发过程中有时候会遇到sql相关的问题,但是有时候代码中不会直接看到真实的sql,想要看到mysql中实际执行的是什么sql,可以通过开启日志跟踪方式查看. 1 开启日志跟踪 SET GLOBAL ...

  4. C语言之extern、const、volatile

    extern: extern修饰变量,声明该变量为外部文件的全局变量.若使用外部全局变量,必须用extern声明. extern修饰函数,声明该函数为外部函数.extern修饰的函数形参必须与原函数一 ...

  5. cache控制器取值从TCM/CACHE/FLASH

    cache 控制器顶层有4组接口,分别为输入I/D bus ,输出TCM bus /Cache bus /direct flash bus (走cache ID bus matrix) flash 控 ...

  6. 【php】 给数组重建索引

    array_values $a = [1,2]; unset($a[1]); $a[] = 3; print_r($a); // 输出 [0=>1,2=>3]

  7. Educational Codeforces Round 31- D. Boxes And Balls

    D. Boxes And Balls time limit per test2 seconds memory limit per test256 megabytes 题目链接:http://codef ...

  8. mac下secureCRT 客户端 $redis-cli回车后没有反应的解决办法

    启动redis server后,SecureCRT进入redis-cli,输入不断在后面追加IP:Port显示设置当前的Session Options-->Terminal-->Emula ...

  9. SQL Server on Ubuntu

    本文从零开始一步一步介绍如何在Ubuntu上搭建SQL Server 2017,包括安装系统.安装SQL等相关步骤和方法(仅供测试学习之用,基础篇). 一.   创建Ubuntu系统(Create U ...

  10. Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站

    完整Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站 第一.安装和配置Apache Web服务器 运行升级命令来确保我们的系统组件各方面都是最新的. apt-get upd ...