Hibernate5.2关联关系之双向一对多(三)

                                                       Hibernate之双向一对多(三)

一.简介

  本篇博文接着上一章的内容接着开展,代码也是在上篇博文的基础上修改。

二.hbm文件的方式

Customer.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.demo.hibernate.one2many.Customer" table="customer">
        <id name="id" type="int">
            <generator class="sequence">
                <param name="sequence_name">cus_order_seq</param>
            </generator>
        </id>
        <property name="name" type="string" column="name"></property>
        <property name="phoneNum" type="string" column="phone_number"></property>
        <!-- inverse表示由对方维护这种关联关系 -->
        <set name="orderSet" inverse="true">
            <key column="customer_id"></key>
            <one-to-many class="com.demo.hibernate.one2many.Order"/>
        </set>
    </class>
</hibernate-mapping>

Order.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.demo.hibernate.one2many.Order" table="orders">
        <id name="id" type="int">
            <generator class="sequence">
                <param name="sequence_name">cus_order_seq</param>
            </generator>
        </id>
        <property name="orderId" column="order_id" type="string"></property>
        <property name="createTime" column="create_time" type="timestamp"></property>
        <many-to-one name="customer" class="com.demo.hibernate.one2many.Customer" column="customer_id"></many-to-one>
    </class>
</hibernate-mapping>

三.注解的方式

Customer.java

@Entity
@Table(name="customer")
public class Customer {
    @Id
    @Column(name="id")
    @SequenceGenerator(name="sequenceGenerator", sequenceName="cus_order_seq", allocationSize=1)
    @GeneratedValue(generator="sequenceGenerator", strategy=GenerationType.SEQUENCE)
    private int id;

    @Column(name="name")
    private String name;

    @Column(name="phone_number")
    private String phoneNum;

    @OneToMany(fetch=FetchType.LAZY, mappedBy="customer")
    private Set<Order> orderSet;

    //setter and getter
}

Order.java

@Entity
@Table(name="orders")
public class Order {
    @Id
    @Column(name="id")
    @SequenceGenerator(name="sequenceGenerator", sequenceName="cus_order_seq", allocationSize=1)
    @GeneratedValue(generator="sequenceGenerator", strategy=GenerationType.SEQUENCE)
    private int id;

    @Column(name="order_id")
    private String orderId;

    @Column(name="create_time")
    @Type(type="timestamp")
    private Date createTime;

    @ManyToOne(fetch=FetchType.LAZY)
    private Customer customer;

    //setter and getter
}

四.测试代码

A.保存

@Test
public void save(){
    Transaction tx = session.beginTransaction();
    Customer customer = new Customer();
    customer.setName("AAAAA");
    customer.setPhoneNum("334411");

    Order order = new Order();
    order.setCreateTime(new Date());
    order.setOrderId("A");

    Order order1 = new Order();
    order1.setCreateTime(new Date());
    order1.setOrderId("B");

    Set<Order> orderSet = new HashSet<Order>();
    orderSet.add(order);
    orderSet.add(order1);

    session.save(customer);
    session.save(order);
    session.save(order1);
    tx.commit();}
时间: 2024-10-10 02:27:12

Hibernate5.2关联关系之双向一对多(三)的相关文章

Hibernate5.2关联关系之单向一对多(一)

Hibernate5.2之单向一对多 一. 简介    Hibernate中最复杂的应该就是各种关联(单向一对多.单向多对一.双向一对多.一对一.多对多)关系的映射,于是笔者就想着去写一些关于Hibernate相关的系列文章,可能最近今年项目上基本上没怎么用Hibernate,包括身边的很多人都在唱衰Hibernate,觉得他笨重.低效,但是笔者认为这都不影响其在我心目中的地位,以及他当初给笔者所带来的震撼,也影响千千万万的程序员.本系列博客中没有关于Hibernate原理性的东西的讲解,只是一

8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

双向一对多关联关系 ”双向一对多关联关系“等同于”双向多对一关联关系“:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: ”一对多“的物理意义:一个客户可以有多个订单,某个订单只能归宿于一个客户. ”双向“的物理意义:客户知道自己有哪些订单,订单也知道自己归宿于哪个客户.也就是说,通过客户对象可以检索到其拥有哪些订单:同时,通过订单也可以查找到其对应的客户信息.这是符合我们业务逻辑需求. 到现在为止(结合前面两节的阐述)我们可

jpa 双向一对多,多对一关联关系

1.1.  双向一对多 Order.java package com.morris.entity; 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 ja

双向一对多

1.在一的一方实体类里添加多的一方的集合 public class Dept { private Integer deptNo; private String deptName; //加入员工集合 private Set<Emp> emps=new HashSet<Emp>(); public Set<Emp> getEmps() { return emps; } public void setEmps(Set<Emp> emps) { this.emps

Hibernate关联映射(单项多对一和一对多、双向一对多)

最近总是接触着新的知识点来扩展自己的知识面:不停的让自己在原地接触天空的感觉真的很美好!!!革命没有成功,程序员的我们怎么能不努力呢...... 一.用员工和部门来剖析关联映射的原理. 1)从这张截图可以看出我会站在员工的角度讲述:(单向关联) 关系:(多个员工对应一个部门)多对一的关系 意味:多个Emp对象只会引用一个Dept对象 方法:在Emp类中定义一个Dept类型属性,来引用所有关联的Dept对象 eg. 第一步建立两个实体类省略 第二步建立大配置 <?xml version='1.0'

JPA双向一对多多一对一

? 双向一对多关系中,必须存在一个关系维护端,在 JPA 规范中,要求  many 的一方作为关系的维护端(owner side), one 的一方作为被维护端(inverse side). ?可以在 one 方指定 @OneToMany 注释并设置 mappedBy 属性,以指定它是这一关联中的被维护端,many 为维护端. ?在 many 方指定 @ManyToOne 注释,并使用 @JoinColumn 指定外键名称 package com.morris.entity; import ja

hibernate中配置单向多对一关联,和双向一对多

什么是一对多,多对一?双向多对一和双向一对多是不是同一个概念? 是一个概念,双向多对一和双向一对多都是配置一个 一对多和多对一 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是多 父亲是1  总结: 一对多就是: 1找到n 多对一就是: n找到1 有些人写概念写一大堆搞起我之前是一脸懵逼,还好弄懂了(手动滑稽) 配置单向多对一 通过上面我们可以了解,双向一对多是 1找n

Hibernate实现双向一对多,多对一

人与电话号码是一对多 ,多对一的关系 @Entity @Table(name="tb_person") public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; @OneToMany(mappedBy = "person") /*在双向一对多关系中 将控制权交给“多”方 */ private List&l

hibernate双向一对多关联关系

双向的多对一(一对多)关联关系: 其实这种关联关系就是把单向的多对一和单向的一对多的关联关系的整合.     只是说明一点: 代码:   package qau.edu.ren; import java.util.Date; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Test { public static