JPA双向一对多多一对一

?

双向一对多关系中,必须存在一个关系维护端,在 JPA 规范中,要求  many 的一方作为关系的维护端(owner side), one 的一方作为被维护端(inverse side)。

?可以在 one 方指定 @OneToMany 注释并设置 mappedBy 属性,以指定它是这一关联中的被维护端,many 为维护端

?在 many 方指定 @ManyToOne 注释,并使用 @JoinColumn 指定外键名称


    1. package com.morris.entity;
    2. import javax.persistence.CascadeType;
    3. import javax.persistence.Column;
    4. import javax.persistence.Entity;
    5. import javax.persistence.FetchType;
    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="order_item")
    13. public class OrderItem {
    14. @Id
    15. @GeneratedValue
    16. @Column(name="order_item_id")
    17. private Integer orderItemId;
    18. @Column(name="product_name",length=50,nullable=false)
    19. private String productName;
    20. @Column(name="product_price",nullable=false)
    21. private Double productPrice;
    22. /**
    23. * ManyToOne:多对一的配置
    24. * cascade(级联):all(所有),merge(更新),refresh(查询),persistence(保存),remove(删除)
    25. * fetch: eager:立即加载  one的一方默认是立即加载
    26. *            lazy:懒加载    many的一方默认是懒加载
    27. * optional:是否可选,外键是否允许为空
    28. *
    29. * JoinColumn:指定外键名
    30. *
    31. */
    32. @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.EAGER,optional=false)
    33. @JoinColumn(name="order_id")
    34. private Order order;
    35. public OrderItem() {
    36. super();
    37. // TODO Auto-generated constructor stub
    38. }
    39. @Override
    40. public String toString() {
    41. return "OrderItem [orderItemId=" + orderItemId + ", productName="
    42. + productName + ", productPrice=" + productPrice + ", order="
    43. + order + "]";
    44. }
    45. public Integer getOrderItemId() {
    46. return orderItemId;
    47. }
    48. public void setOrderItemId(Integer orderItemId) {
    49. this.orderItemId = orderItemId;
    50. }
    51. public String getProductName() {
    52. return productName;
    53. }
    54. public void setProductName(String productName) {
    55. this.productName = productName;
    56. }
    57. public Double getProductPrice() {
    58. return productPrice;
    59. }
    60. public void setProductPrice(Double productPrice) {
    61. this.productPrice = productPrice;
    62. }
    63. public Order getOrder() {
    64. return order;
    65. }
    66. public void setOrder(Order order) {
    67. this.order = order;
    68. }
    69. public OrderItem(String productName,
    70. Double productPrice) {
    71. super();
    72. this.productName = productName;
    73. this.productPrice = productPrice;
    74. }
    75. }
    76. ---------------------------------------------------------------------------------
    77. 双向一对多
    78. package com.morris.entity;
    79. import java.util.Set;
    80. import javax.persistence.CascadeType;
    81. import javax.persistence.Column;
    82. import javax.persistence.Entity;
    83. import javax.persistence.FetchType;
    84. import javax.persistence.Id;
    85. import javax.persistence.OneToMany;
    86. import javax.persistence.Table;
    87. @Entity
    88. @Table(name="orders")
    89. public class Order {
    90. @Id
    91. @Column(name="order_id",length=32)
    92. private String orderId;
    93. @Column(name="order_name",length=50)
    94. private String orderName;
    95. /**
    96. * OneToMany:一对多的配置
    97. * mappedBy="order":指定由多的一方的order属性维护关联关系
    98. *
    99. */
    100. @OneToMany(cascade={CascadeType.REFRESH,CascadeType.MERGE,CascadeType.REMOVE,CascadeType.PERSIST},fetch=FetchType.LAZY,mappedBy="order")
    101. private Set<OrderItem> orderItems;
    102. public Order(String orderId, String orderName, Set<OrderItem> orderItems) {
    103. super();
    104. this.orderId = orderId;
    105. this.orderName = orderName;
    106. this.orderItems = orderItems;
    107. }
    108. public Set<OrderItem> getOrderItems() {
    109. return orderItems;
    110. }
    111. public void setOrderItems(Set<OrderItem> orderItems) {
    112. this.orderItems = orderItems;
    113. }
    114. public Order() {
    115. super();
    116. // TODO Auto-generated constructor stub
    117. }
    118. public Order(String orderId, String orderName) {
    119. super();
    120. this.orderId = orderId;
    121. this.orderName = orderName;
    122. }
    123. @Override
    124. public String toString() {
    125. return "Order [orderId=" + orderId + ", orderName=" + orderName + "]";
    126. }
    127. public String getOrderId() {
    128. return orderId;
    129. }
    130. public void setOrderId(String orderId) {
    131. this.orderId = orderId;
    132. }
    133. public String getOrderName() {
    134. return orderName;
    135. }
    136. public void setOrderName(String orderName) {
    137. this.orderName = orderName;
    138. }
    139. }

原文地址:https://www.cnblogs.com/MAPO/p/8507406.html

时间: 2024-10-10 06:50:20

JPA双向一对多多一对一的相关文章

jpa 双向一对多,多对一关联关系

1.1.  双向一对多 Order.java package com.morris.entity; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import ja

jpa的双向一对多和双向一对一关联关系

在分享之前先给大家看两个异常,应该说这一类的异常还是很常见的,主要原因是jar包冲突 异常1: java.lang.NoSuchFieldError: INSTANCE at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94) at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59) at org.hibernate.cfg

JPA开发总结&lt;四&gt;--一对一双向关联

整理完了一对多的关联关系,下面咱们来看看一对一的关联配置情况,重点还是在于分清楚关系维护方和关系被维护方,然后在具体操作,在个就是cascade=CascadeType的维护方式,没必要的级联尽量不要,否则会造成不必要的结果. 在一对一中的例子中,我们分析人和身份证号的关系,一个人只能有一个身份证号,而且伴随着人死亡而失效,至于人是否出生就有身份证号我们不深究,这里理解为不是,无关影响.那具体操作看代码: 定义人对象类,让身份证号做被维护者: /** * JPA双向一对一关联,Person作为关

8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

双向一对多关联关系 ”双向一对多关联关系“等同于”双向多对一关联关系“:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: ”一对多“的物理意义:一个客户可以有多个订单,某个订单只能归宿于一个客户. ”双向“的物理意义:客户知道自己有哪些订单,订单也知道自己归宿于哪个客户.也就是说,通过客户对象可以检索到其拥有哪些订单:同时,通过订单也可以查找到其对应的客户信息.这是符合我们业务逻辑需求. 到现在为止(结合前面两节的阐述)我们可

Jpa配置一对多关系

在网上查了很多关于jpa的一对多表关联的操作,踩了很多坑,今天终于解决了 下面上一下我自己的代码,记录一下 老师和学生(一对多关系) 首先搭建环境,添加依赖包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche

双向一对多

1.在一的一方实体类里添加多的一方的集合 public class Dept { private Integer deptNo; private String deptName; //加入员工集合 private Set<Emp> emps=new HashSet<Emp>(); public Set<Emp> getEmps() { return emps; } public void setEmps(Set<Emp> emps) { this.emps

Hibernate实现双向一对多,多对一

人与电话号码是一对多 ,多对一的关系 @Entity @Table(name="tb_person") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; @OneToMany(mappedBy = "person") /*在双向一对多关系中 将控制权交给“多”方 */ private List&l

Hibernate5.2关联关系之双向一对多(三)

                                                       Hibernate之双向一对多(三) 一.简介 本篇博文接着上一章的内容接着开展,代码也是在上篇博文的基础上修改. 二.hbm文件的方式 Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hi

一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)

上篇博客已经采用jpa注解来实现了一对多关联映射,将这种关联映射以外键的形式处理,现在来看看怎么以第三张表的形式处理.采用jpa注解来映射数据库要使用的jar包见上篇博客: 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一) 现在看第二种方式:以第三张表的关系来体现 Group.java package com.tgb.zhudan; import java.util.List; import javax.persistence.CascadeType; import j