关系: 订单 ---> 订单项 一对多的双向关联 JPA规范:一对多的双向关联,多的一方是负责关系维护,负责外键的更新。关系的被维护段是没有权利更新外键的。其实我们仔细理解:本来一对多的关系中多方是记录一方的外键,那么肯定是由多方去更新自己的外键。 【Java类设计,包含数据库设计】 package OneToMany; import java.util.Date; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** * 订单类 * @author 青山 * @date 2014年10月19日 * @file name: Order.java * * create table t_order( orderid int primary key, orderdate date, summoney numeric(10,2) ); 和订单明细时一对多的双向关联 */ @Entity @Table(name="t_order") public class Order { @Id @Column(name="orderid") @GeneratedValue(strategy=GenerationType.IDENTITY) private int orderid; @Temporal(TemporalType.DATE) @Column(name="orderdate") private Date date; //mappedBy相当于在hibernate中配置set的时候的inverse的配置 @OneToMany(mappedBy="order",fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE}) private Set<OrderItem> items; @Column(name="summoney") private double sum; public int getOrderid() { return orderid; } public void setOrderid(int orderid) { this.orderid = orderid; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Set<OrderItem> getItems() { return items; } public void setItems(Set<OrderItem> items) { this.items = items; } public double getSum() { return sum; } public void setSum(double sum) { this.sum = sum; } } 【订单项】 package OneToMany; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * 订单明细类 * @author 青山 * @date 2014年10月19日 * @file name: OrderItem.java * * create table t_orderitem( itemid int primary key AUTO_INCREMENT, productname varchar(45), productcount int, price numeric(10,2), pk_orderid int ); */ @Entity @Table(name="t_orderitem") public class OrderItem { @Id @Column(name="itemid") @GeneratedValue(strategy=GenerationType.IDENTITY) private int oiid; @Column(name="productname") private String productName; @Column(name="productcount") private int count; @Column(name="price") private float price; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="pk_orderid") private Order order; public int getOiid() { return oiid; } public void setOiid(int oiid) { this.oiid = oiid; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } } 【测试】 package OneToMany; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import util.JPAManagerFactory; public class TestOneMany { public static void main(String[] args) { EntityManager manager = JPAManagerFactory.getMFInstance().getManager(); EntityTransaction et = manager.getTransaction(); et.begin(); // add(manager); // query(manager); query2(manager); et.commit(); manager.close(); } static void query(EntityManager manager) { Order order = manager.find(Order.class, 2); System.out.println(order.getDate()); Set<OrderItem> set = order.getItems(); System.out.println(set.size()); for(OrderItem item : set){ System.out.println(item.getProductName()); } } static void query2(EntityManager manager) { OrderItem item = manager.find(OrderItem.class, 3); System.out.println(item.getProductName()); Order order = item.getOrder(); System.out.println(order.getDate()+" "+order.getSum()); System.out.println(order.getItems().size()); } static void add(EntityManager manager){ Order order = new Order(); order.setDate(new Date()); order.setSum(10); Set<OrderItem> set = new HashSet<OrderItem>(); OrderItem item1 = new OrderItem(); item1.setCount(5); item1.setPrice(15.5f); item1.setProductName("IPhone4S"); OrderItem item2 = new OrderItem(); item2.setCount(5); item2.setPrice(15.5f); item2.setProductName("IPhone6"); set.add(item2); set.add(item1); order.setSum(item1.getPrice()*item1.getCount()+item2.getPrice()*item2.getCount()); order.setItems(set); item1.setOrder(order); item2.setOrder(order); manager.persist(order); } }
相关推荐
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
hibernate-jpa-2.1-api-1.0.0.Final.jar官方下载,请放心使用
java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 或javax/persistence/entitylistener问题
java运行依赖jar包
总之,深入研究"hibernate-jpa-2.0-api-1.0.1.Final-sources"源码不仅可以增强我们对JPA规范的理解,也能帮助我们在实际开发中更好地利用Hibernate,提高代码质量和项目效率。通过分析源码,我们可以找到优化点,...
本篇文章将重点围绕“hibernate-jpa-2.1-api-1.0.0.final-sources.jar.zip”这一压缩包,深入解析Hibernate对JPA 2.1 API的实现,以期帮助读者深入理解其内部机制。 JPA(Java Persistence API)是Java平台上的一个...
6. **关系映射**:包括一对一、一对多、多对一和多对多的关系,使用@OneToOne, @OneToMany, @ManyToOne 和 @ManyToMany 注解来定义。 7. **懒加载(Lazy Loading)**:一种优化策略,关联的对象在需要时才从数据库...
**JPA 2 一对多双向关联关系** Java Persistence API(JPA)是Java平台上的一个标准,用于处理对象关系映射(ORM),使得开发者可以使用面向对象的方式操作数据库。在JPA中,一对多关联关系是常见的实体间关系类型...
4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个中间表来存储关系。 在实际应用中,JPA的关联映射不仅可以简化对象关系映射的配置,还能提供诸如级联操作(`@CascadeType`)和懒加载(`...
综上所述,"querydsl-jpa-codegen-3.3.3.zip" 为Java开发者带来了高效、类型的JPA查询解决方案,而"JBugmenot.zip"则提供了一种便捷的匿名登录机制。这两个开源项目展示了Java社区的创新精神和对开发效率的追求。...
在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...
总结来说,"springboot-jpa-activiti-bootstrap-master"项目是一个集成了SpringBoot、JPA和Activiti的实战案例,它涵盖了后端开发的多个重要环节,对于想要提升企业级应用开发能力的开发者来说,这是一个非常有价值...