- 浏览: 456622 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (354)
- 面向对象分析设计/系统架构 (12)
- Mysql/Orcal11g (13)
- JSP/Java//Python/Xharbour (66)
- 软件测试 (21)
- 信息安全小知识 (1)
- Android (5)
- IT生活/哲学/兵法 (23)
- 软件工程/UML/需求分析学习与实践 (6)
- 操作系统/网络/组成原理 (9)
- 持续集成Maven/Hudson/自动化测试 (9)
- eBay /Paypal developer (10)
- Hadoop/HBase/Solr (0)
- 重构分析及其思考 (2)
- 企业架构 (7)
- 分析模式/设计模式 (4)
- SSH学习笔记 (1)
- Quartz及其JWatch监控 (0)
- Linux服务器 (0)
- ExtJs学习笔记 (1)
- 重读java编程思想 (3)
- ESB/SOA/WebServices (0)
- SpringMVC/Struts/Hibernate/Spring (7)
- Xharbour/Pelles C/ SQLite3 (0)
- Magento 电商 (1)
- Object C (1)
- note/redis (0)
- SpringBoot (0)
最新评论
-
snow8261:
太粗略了。
企业架构之数据架构 -
haithink:
面试成功没?
JVM 加载Class文件的原理及其机制 -
feisi0003731843:
不好意思我没有重启,重启后好多了,可有的地方回放还是不成功的。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
feisi0003731843:
这个好像不行吧,我试过了不好使啊。还是用id来做的。不能用啊。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
yuchensuifeng:
您好,静态页面是可以的,但是,我指定error-page为js ...
JSP创建错误处理页面
前面介绍和总结了JPA的入门知识,也就是搭建环境和简单的使用了JPA的一个实例。现在再来总结下一些常见的关系(一对多和多对一的关系)。
在学习这些的时候,我们不得单单就学习他本身来学习,我们应该联系相关的一些知识来进行学习。比如Hibernate等
-------------------------------
例如我们用一个例子来开启JPA的一对多和多对一的学习。
比如你去当当网上买书籍,当当网就给你一个订单。
通过上面的业务活动描述你可以分析得出:一个订单可以包含一个或多个订单项.那么我们将将订单和订单项设计关系为(1:N)一对多的关系(排除0)。得出关系我们就使用JPA来实现这个关系(关于建立JPA和基本的配置我就不再说了,如果不明白请看JPA入门篇)。
首先建立订单实体类
订单项的实体类
下面看看测试类
总结:OneToMany或者其他的关系,在建立联系的时候,要注意理解关系维护端和关系被维护端
在学习这些的时候,我们不得单单就学习他本身来学习,我们应该联系相关的一些知识来进行学习。比如Hibernate等
-------------------------------
例如我们用一个例子来开启JPA的一对多和多对一的学习。
比如你去当当网上买书籍,当当网就给你一个订单。
通过上面的业务活动描述你可以分析得出:一个订单可以包含一个或多个订单项.那么我们将将订单和订单项设计关系为(1:N)一对多的关系(排除0)。得出关系我们就使用JPA来实现这个关系(关于建立JPA和基本的配置我就不再说了,如果不明白请看JPA入门篇)。
首先建立订单实体类
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); } }
订单项的实体类
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; } }
下面看看测试类
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或者其他的关系,在建立联系的时候,要注意理解关系维护端和关系被维护端
发表评论
-
java实现读取文件下所有的excel文件
2012-08-10 09:30 2086最近处理一个压缩包,里面有几百上千个excel文件。本来 ... -
在firefox浏览器下出现如果引用外部连接不存在会隐藏红叉
2012-07-23 15:38 993在firefox下引用出错的一些图片会隐藏红叉。而在IE下 ... -
java 字符替换的一些问题值得记录下
2011-09-30 16:40 883最近在处理一些字符串的替换中发生的一些问题。 最近需要临 ... -
ExtJs学习之弹出框,提示框,输入框等框
2011-06-23 22:13 93781.ExtJs之消息框: 语法:Ext.MessageB ... -
FreeMarker学习之概念
2010-08-04 10:12 860FreeMarker概述: 引用 1. ... -
HTML标准属性
2010-07-03 20:35 753核心属性(Core attributes) 以下标签 ... -
HTML标签
2010-07-03 20:14 1005HTML 4.01 / XHTML 1.0 参考手册 按字母 ... -
HTML基础
2010-07-03 00:54 772基于Web前端技术是有HTML静态语言向现在的JaveSc ... -
Struts2的开发规范和技巧
2010-05-28 14:56 1238基于Struts2的开发,如果没有足够的经验和规范做支撑,并不 ... -
第一次的Struts2的一个异常记录
2010-05-28 14:22 1048在配置正确struts.xml、web.xml、Action类 ... -
Java处理Excel全解一
2010-05-25 10:00 2189在获取客户需求的时候 ... -
Java EE 6 规范之平台概述
2010-05-22 21:28 2211JavaTM平台企业版(Java EETM)的概述 体系结构 ... -
Python3入门学习
2010-05-14 14:51 2237在学习一门计算机语言的时候,首先接触的入门程序基本上都是& ... -
Python3操作文件,目录和路径
2010-05-14 11:48 35081.遍历文件夹和文件 ... -
内存溢出
2010-04-22 14:23 1425java SE应用程序共同的问 ... -
JPA之ManyToMany的处理
2010-04-18 14:17 4513在处理关系中,最为麻烦的可能是多对多的关系处理,因为多对多 ... -
JPA之OneToOne关系处理
2010-04-18 14:05 3942在很早学习关系数据库的时候学过一对多,多对一,一对一,多对多的 ... -
JPA学习之二(入门篇)
2010-04-16 10:48 3761简单总结下,JPA的入门。在学习JPA的时候运用参考Hib ... -
JPA2.0的学习一
2010-04-15 17:18 8634Java EE 5平台引入了Java ... -
读取Properties文件的一些方法
2010-03-13 22:53 1164读取Properties文件常见的 ...
相关推荐
"JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...
- "JPA之OneToMany和ManyToOne处理"的MHT文件深入讨论了这两种关联的处理方法。 - "SpringHibernateJPA0300_BoneCP.rar"可能包含了一个使用 BoneCP 作为连接池的Spring JPA与Hibernate项目。 - "School.rar"和...
**JPA(Java ...`@ManyToMany`和`@OneToMany`注解是JPA中处理复杂关系的重要工具,通过测试可以确保这些关系正确地映射和持久化。在实际项目中,理解并熟练运用这些概念对于提升开发效率和代码质量至关重要。
在本篇《JPA学习总结(三)--JPAOneToMany双向关联》中,我们将深入探讨Java Persistence API (JPA)中的OneToMany关系映射,这是一种在数据库表之间建立一对多关联的方式。JPA作为ORM(对象关系映射)框架,允许我们...
在Spring Data JPA框架中,我们常常需要处理数据库中的复杂关系,其中一对一、一对多和多对多是最常见的实体关联关系。本教程将重点讲解如何在Spring Data JPA中实现一对多关系,以及如何进行多表联查。在这个名为...
常见的批注有`@Entity`(定义实体类)、`@Table`(指定映射的数据库表)、`@Id`(定义主键)、`@GeneratedValue`(自动生成主键)、`@ManyToOne`、`@OneToMany`、`@OneToOne`和`@ManyToMany`(定义关联关系)等。...
在JPA中,注解如`@Entity`用于标记实体类,`@Table`指定对应的数据库表,`@Id`定义主键,`@Column`定义字段属性,`@OneToMany`、`@ManyToOne`、`@OneToOne`和`@ManyToMany`处理关联关系等。针对Oracle,可能还会涉及...
"JavaOne2009-JPA2映射的神秘之旅.pdf" 和 "JavaOne2009-JPA2新特征.pdf" 这两个文档,显然涵盖了JPA2的重要概念和新特性,特别是关于映射和框架的最新发展。以下是这两个主题的主要知识点: 1. **JPA2新特性**: ...
4. **关联(Association)**:JPA支持一对一、一对多、多对一和多对多的关系映射,通过`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`注解来实现。 5. **继承(Inheritance)**:JPA提供了单表继承、联合...
- `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`:定义实体之间的关联关系。 **JPA核心概念** 1. **实体(Entity)**:代表数据库中的表,由`@Entity`批注的Java类表示。 2. **实体管理器...
8. **关联映射**:JPA支持一对一、一对多、多对一和多对多的关系映射,通过@OneToOne、@OneToMany、@ManyToOne和@ManyToMany注解实现。 9. **懒加载和级联操作**:懒加载可以延迟加载关联的对象,直到真正需要时才...
6. **关联映射**:JPA允许定义实体之间的关联,如一对一(@OneToOne),一对多(@OneToMany),多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过属性或集合进行映射。 7. **懒加载和即时加载**:...
总结,JPA提供了强大的关联和继承映射机制,让开发者能更便捷地处理数据库操作。正确理解和运用这些特性,可以显著提升Java应用程序的数据管理效率和代码质量。在设计实体模型时,应根据业务需求灵活选择合适的映射...
`@OneToMany`和`@ManyToOne`注解分别用于映射这种关系。`mappedBy`属性用于指定反向映射的字段,`fetch`属性则用于指定加载策略,如`EAGER`立即加载或`LAZY`延迟加载。 - **多对多(Many-to-Many)**:这种关系涉及...
JPA 提供了一种对象关系映射 (ORM) 方法来处理数据库,允许开发者以面向对象的方式操作数据库。本文将详细介绍 JPA 中四种常见的映射关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及...
7. **关系映射(Relationship Mapping)**:JPA支持一对一、一对多、多对一和多对多的关系映射,如`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`。 8. **继承映射(Inheritance Mapping)**:JPA支持单...
在JPA中,一对多关系通过@OneToMany和@ManyToOne注解定义,级联操作如CascadeType.PERSIST、CascadeType.REMOVE允许在操作父对象时自动处理子对象的状态。 **11. JPA中的一对多延迟加载与关系维护(一对多关系:二...
- `@OneToOne`、`@ManyToOne`、`@OneToMany` 和 `@ManyToMany`:定义不同类型的关联关系。 - `@MapKey` 和 `@OrderBy`:在映射关联集合时提供额外的排序和键控制。 6. **组合和继承批注**: - `@Embeddable`:...
3. **实体关系(Entity Relationships)**: JPA支持多种关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)关系。 4. **实体监听器(Entity Listeners)**: 可以...
3. **实体关系(Entity Relationships)**: 如一对一、一对多、多对一和多对多,使用`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`注解表示。 4. **查询(Querying)**: 使用JPQL(Java Persistence ...