转@OneToMany或@ManyToOne的用法-annotation关系映射篇(上)
原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdm.html
例如我们用一个例子来开启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或@ManyToOne的用法-annotation关系映射篇(上)的更多相关文章
- 转@ManyToMany- annotation关系映射篇(下)
原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdd.html 终于要说ManyToMany了 场景:Product和Customer. 先看TestP ...
- Hibernate -- 注解(Annotation)关系映射
转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html 1. Hibernate Annotation关系映射有下面几种 ...
- Hibernate注解关系映射
Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid) 1)一对一外键关联映射(单向) @O ...
- JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析
JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...
- hibernate注解之@Onetomany、@Manytoone、@JoinColumn
@Onetomany用于实体类与数据库表映射中少的一方,请看下面的例子. 假设一个用户只有一种角色,用户和角色是onetomany的关系 用户实体 @Entity @Table(name=" ...
- Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用
以某个实际场景为例,现在两张表:用户表User 订单表Order:很显然用户对订单是一对多的关系.二者注解如下 用户表User @Entity @Table(name="users" ...
- JPA之@OneToMany、@ManyToOne、@JoinColumn
顾名思义,@OneToMany.@ManyToOne这两个注解就是处理一对多,多对一的关系 这两个注解是成双成对的,有了@OneToMany,一定会配置一个@ManyToOne OneToMany设置 ...
- android对象关系映射框架ormlite之一对多(OneToMany)
前两天,用ormlite对单张表进行了基本的操作,但是,我们知道通常情况对于单张表格进行操作在实际情况中很前两天不现实,那么ormlite能否像Hibenate那样实现多张表之间的一对多,多对多(即O ...
- JPA总结——实体关系映射(一对多@OneToMany)
JPA总结——实体关系映射(一对多@OneToMany) 注意:本文出自“阿飞”的博客,如果要转载本文章,请与作者联系! 并注明来源: http://blog.sina.com.cn/s/blog_4 ...
随机推荐
- mybatis——使用mapper代理开发方式
---------------------------------------------------------------generatorConfig.xml------------------ ...
- ln 命令使用
今天在工作中遇到了“ln -sf”命令,发觉很久没用基本忘光,遂重拾鸟哥神书温补了一把. 简单描述的话,ln是linux中用来链接文件的,存在两种不同的连接: 1) Hard Link 实现该操作很简 ...
- jsp静态、动态引入其他jsp
1. <%@ include file="page.jsp"%> /*静态引入,内容必须写成固定值*/ 在servlet容器转化jsp为servlet时,将引入的 ...
- python整理之(字符串、元组、列表、字典)
一.关于字符串的整理总结 对于字符串的操作常用的有这些: 字符串的操作通过dir()函数可以查看 我们先整理没有下划线的用法,有下划线的暂时不去考虑. 1.capitalize 功能:使字符串的首字母 ...
- select for update行锁
select for update行锁 2008-05-26 15:15:37 分类: Oracle Select-For Update语句的语法与select语句相同,只是在select语句的后面 ...
- Mysql快速删除表中重复的数据
表结构 CREATE TABLE T_VENDOR ( ID ) NOT NULL AUTO_INCREMENT COMMENT 'ID', COUNTRY ) DEFAULT NULL COMMEN ...
- spring 4 @RestController 小试
在建立好基本的spring框架后,可以尝试实现一下简单的rest风格请求 1.需要引入的包,部分pom.xml文件 <dependency> <groupId>org.code ...
- 怎样让SoapHttpClientProtocol不使用系统默认代理
方法很简单,但找起来很难. 使用SoapHttpClientProtocol类的Proxy属性. 不能设空值,必须设一个新值. 赶脚底层在链接的时候会判断这个属性是不是null,如果null就会用默认 ...
- 微信:JSSDK开发
根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...
- 支持Cookie并开放了一些特殊设置项的HttpWebClient
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...