zoukankan      html  css  js  c++  java
  • Hibernate5.2关联关系之单向多对一(二)

                                                         Hibernate5.2之单向一对多(二)

    一. 简介

      在本篇博文中笔者会在上一篇博客的代码基础上进行修改,本篇文章将介绍单向的一对多。

    二. 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>
            
        </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")
        private int id;
        
        @Column(name="name")
        private String name;
        
        @Column(name="phone_number")
        private String phoneNum;
        
        //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")
        private int id;
        
        @Column(name="order_id")
        private String orderId;
        
        @Column(name="create_time")
        @Type(type="timestamp")
        private Date createTime;
        
        @ManyToOne(fetch=FetchType.LAZY)  //注解的方式需要指定延迟加载策略
        @JoinColumn(name="customer_id")
        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.setCustomer(customer);
            
        Order order1 = new Order();
        order1.setCreateTime(new Date());
        order1.setOrderId("B");
        order1.setCustomer(customer);
            
        session.save(customer);
        session.save(order);
        session.save(order1);
        tx.commit();
    }

     B.get方式

    @Test
    public void get(){
        Order order = session.get(Order.class, 17);
        System.out.println("查询Customer的SQL已经发送");
        System.out.println(order.getOrderId() + "::" + order.getCreateTime());
        Customer customer = order.getCustomer();
        System.out.println("查询Customer的SQL还未发送,因为延迟加载,只有当在使用Customer的时候才会发送SQL");
        System.out.println(customer.getName() + "::" + customer.getPhoneNum());
    }

    C.load方式

    @Test
    public void load(){
        Order order = session.load(Order.class, 17);
        System.out.println("查询Order的SQL还未发送,只有当使用的时候才会放松SQL");
        System.out.println(order.getOrderId() + "::" + order.getCreateTime());
        Customer customer = order.getCustomer();
        System.out.println("查询Order的Customer还未发送,因为延迟加载,只有当在使用Customer的时候才会发送SQL");
        System.out.println(customer.getName() + "::" + customer.getPhoneNum());
    }

    D.delete(删除)

    @Test
    public void delete(){
        Order order = new Order();
        order.setId(17);
        Transaction tx = session.beginTransaction();
        session.delete(order);
        tx.commit();
    }

    E.update(更新)

    @Test
    public void update(){
        Order order = new Order();
        order.setId(18);  
        order.setCreateTime(new Date());
        order.setOrderId("N");
            
        Transaction tx = session.beginTransaction();
        session.update(order);
        tx.commit();
    }
  • 相关阅读:
    第一章epoll
    sk_buff结构--转载
    邻居子系统1.5 neigh output
    netfilter内核态与用户态 通信 之 sockopt
    邻居子系统1.4
    邻居子系统 1.3
    邻居子系统 1.2
    邻居子系统 1.1
    linux 内核 tasklets 原理以及工作队列
    linux 内核 同步原理
  • 原文地址:https://www.cnblogs.com/miller-zou/p/5724425.html
Copyright © 2011-2022 走看看