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();
}

Hibernate5.2关联关系之单向多对一(二)的更多相关文章

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

    Hibernate5.2之单向一对多 一. 简介    Hibernate中最复杂的应该就是各种关联(单向一对多.单向多对一.双向一对多.一对一.多对多)关系的映射,于是笔者就想着去写一些关于Hibe ...

  2. JPA(五):映射关联关系------映射单向多对一的关联关系

    映射单向多对一的关联关系 新建Customer.java: package com.dx.jpa.singlemanytoone; import java.util.Date; import java ...

  3. Hibernate逍遥游记-第13章 映射实体关联关系-003单向多对多

    0. 1. drop database if exists SAMPLEDB; create database SAMPLEDB; use SAMPLEDB; create table MONKEYS ...

  4. JPA(六):映射关联关系------映射单向一对多的关联关系

    映射单向一对多的关联关系 新建项目项目请参考<JPA(二):HellWord工程>,基于上一章讲解的<JPA(五):映射关联关系------映射单向多对一的关联关系>中的例子进 ...

  5. 6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)

    单向多对一的关联关系 具体体现:n的一方有1的引用,1的一方没有n的集合属性 举个例子:订单Order对顾客Customer是一个单向多对一的关联关系.Order是n的一方,有对Customer的引用 ...

  6. JPA 映射单向多对一的关联关系

    1.首先在多的一端加入一的一端的实体类 //映射单向n-1的关联关 //使用@ManyToOne 来映射多对一的关系 //使用@JoinColumn 来映射外键/可以使用@ManyToOne的fetc ...

  7. JPA中实现单向多对一的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  8. Hibernate(6)关联关系_单向n对1

    1.单向 n-1 关联只需从 n 的一端可以访问 1 的一端 2.实体类 n端:Order.java public class Order { private Integer orderId; pri ...

  9. Hibernate框架单向多对多关联映射关系

    建立单向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

随机推荐

  1. HTTP动词

    对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新 ...

  2. linux cron计划任务

    说明:Crontab是Linux系统中在固定时间执行某一个程序的工具,类似于Windows系统中的任务计划程序 下面通过详细实例来说明在Linux系统中如何使用Crontab 操作系统:CentOS ...

  3. linux查看一条命令的执行结果是1还是0

    echo $? 0为成功 其他为失败

  4. sql server 中xml 数据类型的insert、update、delete

    近日对SQL操作XML作了如下整理: 1.插入 XML DECLARE @myDoc XMLSET @myDoc = '<Root> <ProductDescription Prod ...

  5. windows下sublime2 clojure环境配置

    最近在看<七周七并发模型>,其中函数式编程使用的是clojure来做说明,所以也想顺便学习一下clojure这种不同的编程方式语言.那么做开发肯定需要开发环境,第一步先下载clojure官 ...

  6. SSL加密与系统时间

    最近,家里的神州老笔记本没电池了,要拆C面才能换主板电池,懒得动手,于是搞了个Network Time来做对时.主要是未搞对时之前,所有https的站点都用不了,老人家也抱怨炒股不行,崩溃了...这时 ...

  7. S2SH+mysql-软件开发实际部署问题-8个小时后提示MYSQL数据库无法连接

    type Exception report message description The server encountered an internal error () that prevented ...

  8. UE4 4.14 专用服务器没有生成解决办法

    简单说一下UE4 专用服务器的生成(网上也有其它版本的但是在4.14.1 上不管用) 1.用源代码编译的引擎(如何获取百度上有很多介绍)创建一个C++ UE4 工程. 2. 在vs 中找到红色这个文件 ...

  9. iOS页面传值-wang

    iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...

  10. 【Cocos2d-x 3.x】 精灵帧缓存和纹理缓存

    转自泰然网(Cocos2d-x 3.x官方文档):精灵帧缓存:http://www.tairan.com/archives/6378/   纹理缓存: http://www.tairan.com/ar ...