`
jiangzhenghua
  • 浏览: 601196 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JPA 一对多实例配置

阅读更多
<persistence xmlns="http://java.sun.com/xml/ns/persistence"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"  
   version="1.0">  
   <persistence-unit name="mengya" transaction-type="RESOURCE_LOCAL">  
      <properties>  
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>  
         <property name="hibernate.hbm2ddl.auto" value="update"/>  
         <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>  
         <property name="hibernate.connection.username" value="root"/>  
         <property name="hibernate.connection.password" value="123"/>  
         <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/mp?useUnicode=true&amp;characterEncoding=UTF-8"/>  
      </properties>  
   </persistence-unit>  
</persistence>  

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

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

 

 

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

订单表:

package com.mengya.bean;   
  
import java.util.HashSet;   
import java.util.Set;   
  
import javax.persistence.CascadeType;   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.FetchType;   
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 = 32)   
    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;   
    }   
  
    // cascade表示级联操作   
    // CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法   
    // CascadeType.REFRESH级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据   
    // CascadeType.PERSIST级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法   
    // CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法   
    // FetchType.LAZY表示懒加载。对于xxxtoMany时即获得多的一方fetch的默认值是FetchType.LAZY懒加载。对于xxxtoOne时即获得一的一方fetch的默认值是FetchType.EAGER立即加载   
    // mappedBy表示关系统被维护端,它的值是关系维护端维护关系的属性   
    @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,   
            CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "order")   
    public Set<OrderItem> getItems() {   
        return items;   
    }   
  
    public void setItems(Set<OrderItem> items) {   
        this.items = items;   
    }   
  
    /**  
     * 自己的加的一个方法,为了方便添加OrderItem  
     *   
     */  
    public void addOrderItem(OrderItem item) {   
        item.setOrder(this);   
        this.items.add(item);   
    }   
  
}  

 

订单项表:

package com.mengya.bean;   
  
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.JoinColumn;   
import javax.persistence.ManyToOne;   
  
@Entity  
public class OrderItem {   
    private Integer id;   
  
    private String productName;   
  
    private Float sellPrice = 0f;// 设置默认值   
  
    private Order order;   
  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)   
    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;   
    }   
  
    // cascade表示级联。CascadeType.REFRESH级联刷新   
    // optional表示该对象可有可无,它的值为true表示该外键可以为null,它的值为false表示该外键为not null   
    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, optional = false)   
    // JoinColumn表示外键的列   
    @JoinColumn(name="orderId")   
   public Order getOrder() {   
        return order;   
    }   
  
    public void setOrder(Order order) {   
        this.order = order;   
    }   
  
}  

 

测试:

package com.mengya.junit.test;   
  
import javax.persistence.EntityManager;   
import javax.persistence.EntityManagerFactory;   
import javax.persistence.Persistence;   
  
import org.junit.Test;   
  
import com.mengya.bean.Order;   
import com.mengya.bean.OrderItem;   
  
  
public class JPA_OnetoManyTest {   
    @Test public void save(){   
        EntityManagerFactory factory=Persistence.createEntityManagerFactory("mengya");   
        EntityManager em=factory.createEntityManager();   
        em.getTransaction().begin();   
           
        Order order=new Order();   
        order.setOrderId("200910120001");   
        order.setAmount(450f);   
           
        OrderItem item1=new OrderItem();   
        item1.setProductName("篮球");   
        item1.setSellPrice(220f);   
        OrderItem item2=new OrderItem();   
        item2.setProductName("排球");   
        item2.setSellPrice(230f);   
        order.addOrderItem(item1);   
        order.addOrderItem(item2);   
           
        em.persist(order);   
        em.getTransaction().commit();   
        em.close();   
        factory.close();   
    }   
}  

 

分享到:
评论

相关推荐

    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