前面介绍和总结了JPA的入门知识,也就是搭建环境和简单的使用了JPA的一个实例。现在再来总结下一些常见的关系(一对多和多对一的关系)。 在学习这些的时候,我们不得单单就学习他本身来学习,我们应该联系相关的一些知识来进行学习。比如Hibernate等 ------------------------------- 例如我们用一个例子来开启JPA的一对多和多对一的学习。 比如你去当当网上买书籍,当当网就给你一个订单。 通过上面的业务活动描述你可以分析得出:一个订单可以包含一个或多个订单项.那么我们将将订单和订单项设计关系为(1:N)一对多的关系(排除0)。得出关系我们就使用JPA来实现这个关系(关于建立JPA和基本的配置我就不再说了,如果不明白请看JPA入门篇)。 首先建立订单实体类 Java代码 收藏代码 import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="orders") public class Order { private String orderid; private Float amount = 0f; private Set<OrderItem> items = new HashSet<OrderItem>(); @Id @Column(length = 12) public String getOrderid() { return orderid; } public void setOrderid(String orderid) { this.orderid = orderid; } @Column(nullable = false) public Float getAmount() { return amount; } public void setAmount(Float amount) { this.amount = amount; } @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST,CascadeType.MERGE, CascadeType.REMOVE },mappedBy ="order") //这里配置关系,并且确定关系维护端和被维护端。mappBy表示关系被维护端,只有关系端有权去更新外键。这里还有注意OneToMany默认的加载方式是赖加载。当看到设置关系中最后一个单词是Many,那么该加载默认为懒加载 public Set<OrderItem> getItems() { return items; } public void setItems(Set<OrderItem> items) { this.items = items; } /** *该方法用于向order中加order项 /* public void addOrderItem(OrderItem orderItem){ orderItem.setOrder(this);//用关系维护端来维护关系 this.items.add(orderItem); } } 订单项的实体类 Java代码 收藏代码 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; @Entity public class OrderItem { private Integer id; private String productName; private Float sellPrice = 0f; private Order order; @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 40, nullable = false) public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } @Column(nullable = false) public Float getSellPrice() { return sellPrice; } public void setSellPrice(Float sellPrice) { this.sellPrice = sellPrice; } @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH }, optional = true) @JoinColumn(name="order_id")//这里设置JoinColum设置了外键的名字,并且orderItem是关系维护端 public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } } 下面看看测试类 Java代码 收藏代码 import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.BeforeClass; import org.junit.Test; import cn.itcast.bean.Order; import cn.itcast.bean.OrderItem; public class OneToManyTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void addOrder(){ EntityManagerFactory factory = Persistence.createEntityManagerFactory("test"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); // start transaction Order order = new Order(); order.setAmount(34f); order.setOrderid("00001"); //order中包含的OrderItem项OrderItem1,OrderItem2 OrderItem orderItem1 = new OrderItem(); orderItem1.setProductName("书"); orderItem1.setSellPrice(22f); order.addOrderItem(orderItem1); //add orderitem in order OrderItem orderItem2 = new OrderItem(); orderItem2.setProductName("篮球"); orderItem2.setSellPrice(100f); order.addOrderItem(orderItem2); em.persist(order); //persist order object em.getTransaction().commit(); //commit transaction em.close(); factory.close(); } } 总结:OneToMany或者其他的关系,在建立联系的时候,要注意理解关系维护端和关系被维护端
相关推荐
JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程JPA_OneToMany学习教程
JPA课程manyToMany OneToMany 等全部测试 注解, 有注释
Spring Boot,Maven和MySQL的JPA一对多关系示例 指南 先决条件 JDK 1.8或更高版本 Maven 3或更高版本 MySQL 5.6或更高版本 叠放 Spring Data JPA Sprint Boot MySQL 跑 mvn spring-boot:run
NULL 博文链接:https://lc2586.iteye.com/blog/721309
JPA实体映射对时间字段的处理,使用的JPA比较流行
这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations • A o @AssociationOverride o @AssociationOverrides o @AttributeOverride o @AttributeOverrides ...
jpa之使用hibernate实现
学习hibernate必读,包括JPA2新特征和JPA2映射的神秘之旅两个pdf。
JPA教程JPA教程JPA教程JPA教程JPA教程
jpa jpa规范 jpa源码 jpa jpa规范 jpa源码
jpajpajpajpajpajpajpajpajpajpajpajpajpa
· 0. JPA视频_PPT及源码 · 1.... JPA视频_JPQL_ORDER BY 和 GROUP BY · 21. JPA视频_JPQL_关联查询 · 22. JPA视频_JPQL_子查询和内建函数 · 23. JPA视频_JPQL_DELETE和UPDATE · 24. JPA视频_整合Spring
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注
03_JPA详解_搭建JPA开发环境和全局事务介绍.zip
此资源集成了相关的JPA资源,包括JPA官方文档 JPA详解 JPA批注参考 JPA应用……
使用jpa映射关联和继承
这个demo同时整合了springboot+JPA+mybatis这个两个orm框架。
Spring data jpa 多表联查 一对多的关系和操作多表的操作步骤 客户:一家公司 联系人:这家公司的员工
1. 开发效率极⾼: 2. 成熟的语法结构: ...4. 成熟的框架和架构 常⻅的SQL性能问题,如何优雅处理? 2. 错综复杂的关联关系如何应对? 3. 万恶的LazyException本质是什么? 4. ⾼并发⾼性能要求的API服务要⽤JPA吗?