`

JPA 一对多实例配置

    博客分类:
  • Java
jpa 
阅读更多

http://zmx.iteye.com/blog/487063

 

Xml代码  收藏代码
  1. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  2.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"  
  4.    version="1.0">  
  5.    <persistence-unit name="mengya" transaction-type="RESOURCE_LOCAL">  
  6.       <properties>  
  7.          <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>  
  8.          <property name="hibernate.hbm2ddl.auto" value="update"/>  
  9.          <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>  
  10.          <property name="hibernate.connection.username" value="root"/>  
  11.          <property name="hibernate.connection.password" value="123"/>  
  12.          <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/mp?useUnicode=true&amp;characterEncoding=UTF-8"/>  
  13.       </properties>  
  14.    </persistence-unit>  
  15. </persistence>  

 在JPA中双向一对多关系则多方为关系护端即负责外键记录的更新,一方为被维护端即没有权力更新外键记录

src下在面的META-INF/persistence.xml配置如下:

 

 

订单和订单项两个实例实体Bean如下:

订单表:

Java代码  收藏代码
  1. package com.mengya.bean;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import javax.persistence.CascadeType;  
  7. import javax.persistence.Column;  
  8. import javax.persistence.Entity;  
  9. import javax.persistence.FetchType;  
  10. import javax.persistence.Id;  
  11. import javax.persistence.OneToMany;  
  12. import javax.persistence.Table;  
  13.   
  14. @Entity  
  15. @Table(name = "orders")  
  16. public class Order {  
  17.     private String orderId;  
  18.   
  19.     private Float amount = 0f;// 设置默认值  
  20.   
  21.     private Set<OrderItem> items = new HashSet<OrderItem>();  
  22.   
  23.     @Id  
  24.     @Column(length = 32)  
  25.     public String getOrderId() {  
  26.         return orderId;  
  27.     }  
  28.   
  29.     public void setOrderId(String orderId) {  
  30.         this.orderId = orderId;  
  31.     }  
  32.   
  33.     @Column(nullable = false)  
  34.     public Float getAmount() {  
  35.         return amount;  
  36.     }  
  37.   
  38.     public void setAmount(Float amount) {  
  39.         this.amount = amount;  
  40.     }  
  41.   
  42.     // cascade表示级联操作  
  43.     // CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法  
  44.     // CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据  
  45.     // CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法  
  46.     // CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法  
  47.     // FetchType.LAZY表示懒加载。对于xxxtoMany时即获得多的一方fetch的默认值是FetchType.LAZY懒加载。对于xxxtoOne时即获得一的一方fetch的默认值是FetchType.EAGER立即加载  
  48.     // mappedBy表示关系统被维护端,它的值是关系维护端维护关系的属性  
  49.     @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,  
  50.             CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "order")  
  51.     public Set<OrderItem> getItems() {  
  52.         return items;  
  53.     }  
  54.   
  55.     public void setItems(Set<OrderItem> items) {  
  56.         this.items = items;  
  57.     }  
  58.   
  59.     /** 
  60.      * 自己的加的一个方法,为了方便添加OrderItem 
  61.      *  
  62.      */  
  63.     public void addOrderItem(OrderItem item) {  
  64.         item.setOrder(this);  
  65.         this.items.add(item);  
  66.     }  
  67.   
  68. }  

 订单项表:

Java代码  收藏代码
  1. package com.mengya.bean;  
  2.   
  3. import javax.persistence.CascadeType;  
  4. import javax.persistence.Column;  
  5. import javax.persistence.Entity;  
  6. import javax.persistence.FetchType;  
  7. import javax.persistence.GeneratedValue;  
  8. import javax.persistence.GenerationType;  
  9. import javax.persistence.Id;  
  10. import javax.persistence.JoinColumn;  
  11. import javax.persistence.ManyToOne;  
  12.   
  13. @Entity  
  14. public class OrderItem {  
  15.     private Integer id;  
  16.   
  17.     private String productName;  
  18.   
  19.     private Float sellPrice = 0f;// 设置默认值  
  20.   
  21.     private Order order;  
  22.   
  23.     @Id  
  24.     @GeneratedValue(strategy = GenerationType.AUTO)  
  25.     public Integer getId() {  
  26.         return id;  
  27.     }  
  28.   
  29.     public void setId(Integer id) {  
  30.         this.id = id;  
  31.     }  
  32.   
  33.     @Column(length = 40, nullable = false)  
  34.     public String getProductName() {  
  35.         return productName;  
  36.     }  
  37.   
  38.     public void setProductName(String productName) {  
  39.         this.productName = productName;  
  40.     }  
  41.   
  42.     @Column(nullable = false)  
  43.     public Float getSellPrice() {  
  44.         return sellPrice;  
  45.     }  
  46.   
  47.     public void setSellPrice(Float sellPrice) {  
  48.         this.sellPrice = sellPrice;  
  49.     }  
  50.   
  51.     // cascade表示级联。CascadeType.REFRESH级联刷新  
  52.     // optional表示该对象可有可无,它的值为true表示该外键可以为null,它的值为false表示该外键为not null  
  53.     @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, optional = false)  
  54.     // JoinColumn表示外键的列  
  55.     @JoinColumn(name="orderId")  
  56.     public Order getOrder() {  
  57.         return order;  
  58.     }  
  59.   
  60.     public void setOrder(Order order) {  
  61.         this.order = order;  
  62.     }  
  63.   
  64. }  

 

测试:

Java代码  收藏代码
  1. package com.mengya.junit.test;  
  2.   
  3. import javax.persistence.EntityManager;  
  4. import javax.persistence.EntityManagerFactory;  
  5. import javax.persistence.Persistence;  
  6.   
  7. import org.junit.Test;  
  8.   
  9. import com.mengya.bean.Order;  
  10. import com.mengya.bean.OrderItem;  
  11.   
  12.   
  13. public class JPA_OnetoManyTest {  
  14.     @Test public void save(){  
  15.         EntityManagerFactory factory=Persistence.createEntityManagerFactory("mengya");  
  16.         EntityManager em=factory.createEntityManager();  
  17.         em.getTransaction().begin();  
  18.           
  19.         Order order=new Order();  
  20.         order.setOrderId("200910120001");  
  21.         order.setAmount(450f);  
  22.           
  23.         OrderItem item1=new OrderItem();  
  24.         item1.setProductName("篮球");  
  25.         item1.setSellPrice(220f);  
  26.         OrderItem item2=new OrderItem();  
  27.         item2.setProductName("排球");  
  28.         item2.setSellPrice(230f);  
  29.         order.addOrderItem(item1);  
  30.         order.addOrderItem(item2);  
  31.           
  32.         em.persist(order);  
  33.         em.getTransaction().commit();  
  34.         em.close();  
  35.         factory.close();  
  36.     }  
  37. }  
分享到:
评论

相关推荐

    JPA双向一对多实例配置

    JPA中双向一对多实体Bean的属性配置,包括延迟加载,级联删除等

    JPA一对多双向配置实例

    **JPA一对多双向配置实例详解** 在Java Persistence API (JPA)中,"一对多"关系是数据库中常见的关联类型,它表示一个实体(如用户)可以与多个其他实体(如订单)相关联。本实例将深入探讨如何在JPA中配置一对多的...

    JPA一对一,一对多,多对多关系映射

    本篇将深入探讨JPA中的一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 ### 1. JPA 一对一(OneToOne)关系映射 **概念**:一对一关系意味着两个实体之间存在唯一的关联,一个实体...

    springjpa 和 spring多视图配置实例

    本实例探讨的是如何在Spring环境中整合Spring MVC、Spring Data JPA以及使用Freemarker或JSON作为多视图配置。让我们深入理解这些技术及其相互作用。 首先,Spring MVC是Spring框架的一部分,专门用于构建Web应用...

    jpa例子jpajpa

    2. **实体管理工厂(EntityManagerFactory)**: 这是创建和配置JPA的入口点,通过它我们可以获取到`EntityManager`实例。一般在应用启动时创建,然后在整个应用生命周期内复用。 3. **实体管理器(EntityManager)*...

    JPA多对多Demo

    综上所述,“JPA多对多Demo”是一个全面展示多对多关联关系及其操作的实例。它涵盖了实体的配置、关联关系的建立、查询、持久化操作和事务管理等多个方面,对于理解JPA的多对多关联有很好的学习价值。通过这个示例,...

    jpa开发实例和文档

    **JPA文档**通常会详细讲解这些概念,包括如何配置JPA,如何创建和使用实体,如何执行查询,以及如何处理关联(如一对一、一对多、多对多)等。快速入门JPA的步骤可能包括安装和配置JPA供应商(如Hibernate、Eclipse...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    总结来说,Spring Boot + JPA 的多数据源配置需要对Spring的配置机制有深入理解,包括自动配置、bean的创建、数据源的切换等。同时,合理组织实体类和数据库访问层,确保代码的可维护性和扩展性。这个名为`...

    JPA教程 JPA pdf文档,实例解析

    7. **关系映射**: JPA支持多种关系类型,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。通过`@JoinColumn`和`@JoinTable`注解可以指定关联表的细节。 8. **懒加载...

    JPA中的多对多双向关联实体定义与注解设置

    在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...

    JPA实例 经典

    - **一对多(OneToMany)**: 一个实体对应多个实体,如部门与员工。 - **多对一(ManyToOne)**: 多个实体对应一个实体,如订单与客户。 - **多对多(ManyToMany)**: 多个实体可以关联多个实体,如学生与课程。 ...

    jpa 传智博客课件实例

    虽然描述中提到多对多和多对一的关系没有包含在内,但其他基本属性的映射应该是完整的。这可能包括实体类的定义、字段注解、主键设置、以及简单的CRUD(Create、Read、Update、Delete)操作。 **实体类与表的映射**...

    SpringDataJPA实例

    关于实体关联关系,SpringDataJPA支持多种关联类型,如一对一、一对多、多对一和多对多。以一对多为例,我们可以在`User`实体中定义一个`Set`类型的`Role`属性,表示用户可以拥有多个角色: ```java @Entity public...

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    4. **GenerationType.TABLE**: 使用数据库中的特定表来生成主键,这种方法对多个并发的请求更安全。 5. **GenerationType.UUID**: 生成全局唯一的UUID字符串作为主键,适用于分布式系统。 6. **GenerationType....

    Spring3.2_Hibernate4.2_JPA2全注解实例

    总的来说,这个实例涵盖了Spring 3.2的IoC和事务管理、Hibernate 4.2的ORM能力、JPA 2.0的注解驱动模型以及Ehcache的缓存优化,演示了一个完整的Java企业级应用的开发流程。开发者可以从中学习到如何设置和配置这些...

    jpa最基本最全配置的jar包

    8. **多对一(One-to-Many)、一对多(Many-to-One)、一对一(One-to-One)和多对多(Many-to-Many)关系**: 这些是常见的关联关系,可以通过@OneToMany、@ManyToOne、@OneToOne和@ManyToMany注解进行配置。...

    jpa--9.单向多对一

    - 多对一关系中,如果删除"一"端的实体(Department),那么所有引用它的"多"端实体(Employee)的外键也将变为NULL,除非配置了级联操作。 通过这种方式,JPA允许我们在Java应用程序中轻松地处理数据库中的单向多...

    JPA 配置文件

    JPA及其配置文件不仅简化了Java应用的数据持久化过程,还提供了强大的多对多关系处理能力。通过实体类设计与XML映射文件的合理配置,开发者能以更加简洁高效的方式管理数据库数据,提升应用的开发效率和维护性。

    jpa--10.单向一对多

    在JPA_test1中,可能包含的是一个示例代码或者测试用例,用于演示如何配置和使用单向一对多的关系。通过这个例子,我们可以学习如何在实际项目中应用这些概念,以及如何进行数据的增删改查操作。

    hibernate一对多实例

    【hibernate一对多实例详解】 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。在这个“hibernate一对多实例”中,我们将深入探讨如何在Hibernate中实现一对多的关系,这是一种...

Global site tag (gtag.js) - Google Analytics