以某个实际场景为例,现在两张表:用户表User 订单表Order;很显然用户对订单是一对多的关系。二者注解如下

用户表User

@Entity
@Table(name="users")
public class User{ private Integer id;
private String name; @OneToMany
private List<Order> orders;
}

订单表Order

@Entity
@Table(name="order")
public class order{ private Integer id;
private String name; @ManyToOne
@JoinColumn(name = "userId")
private user user;
} 

以上就完成了两张表之间的外键维护,这种使用场景很常见,此处不再赘述。

下面说一下另外的业务场景,User表和Order使用了很久,后面需要加一个地址表Address,这个表是用户的收货地址,一个用户有多个收货地址,地址表只是单方面依赖用户表,而用户的地址在业务场景中使用的并不是很频繁,而且此时不想修改User表,这个时候,只需要在Address表中加入@ManyToOne就可以,不用对User表做任何修改,如下

@Entity
@Table(name="address")
public class Address{ private Integer id;
private String name; @ManyToOne
@JoinColumn(name = "userId")
private user user;
}

对User表不用做修改,就可以解决问题。

总结:@OneToMany和@ManyToOne是可以分开使用的,不一定非要成对出现。成对使用可以让数据结构更加完整,单独使用的好处是可以轻易扩展原有数据。以上面的例子为例,假如Address表后期不在使用,删除之后也不会对User表造成任何影响。但是Order表却不能轻易删除,删除时会出现外键约束问题。这个就是单独使用@ManyToOne的好处。

单独使用@ManyToOne时也会出现一些问题,在做级联操作时会出现问题。

Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用的更多相关文章

  1. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  5. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...

  6. Hibernate学习之注解学习

    转自:http://blog.sina.com.cn/s/blog_935ebb670101dnre.html 1.类级别注解 @Entity   映射实体类 @Table    映射数句库表 @En ...

  7. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  8. Hibernate学习笔记一

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  9. 【Hibernate学习笔记-5】@Formula注解的使用

    ORM映射关系:注解方式 package org.crazyit.app.domain; import javax.persistence.*; import org.hibernate.annota ...

随机推荐

  1. 有用的url地址

    https://docs.oracle.com/javase/7/docs/api/overview-summary.html https://docs.oracle.com/javase/8/doc ...

  2. day24 面向对象三大特性之封装

    本周内容 组合 封装 多态 面向对象高级 异常处理 网络协议 通讯原理 互联网协议 TCP/UDP 基于TCP协议的套接字 上周回顾 1.xml,os,os.path 2.ATM+购物车 三层结构 3 ...

  3. django实现分页

    分页实现思路: 1.接口拉取库内数据,进行分页 2.页面实现分页组件,切换不同链接 一.接口实现: from django.core.paginator import Paginator p=Pagi ...

  4. SQLdeveloper同时显示多个表的窗口

  5. CUDA 编程的基本模式

    reproduced from: http://www.cnblogs.com/muchen/p/6306747.html 前言 本文将介绍 CUDA 编程的基本模式,所有 CUDA 程序都基于此模式 ...

  6. Cisco无线AP上联口为trunk时无法注册故障处理

    网络环境:WLC5520  AP:1832i-h-k9 客户实施过程中电话告知其将AP和交换机互联的端口类型设置为TRUNK口后,AP无法注册到WLC上,后经过查看配置发现客户用于AP管理的VLAN为 ...

  7. Round Numbers(数位DP)

    Round Numbers http://poj.org/problem?id=3252 Time Limit: 2000MS   Memory Limit: 65536K Total Submiss ...

  8. 微信小程序接入百度统计

    一. 百度统计添加应用,获取appkey和微信小程序统计sdk: 1. 百度统计首页,点击“我的全部应用”右侧的添加按钮: 2. “应用类型”选择小程序统计,选择微信小程序,填写应用名称信息,选择内容 ...

  9. ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号

    异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...

  10. TZOJ 3709:Number Maze(广搜记录前驱)

    描述 You are playing one game called "Number Maze". The map of an example is shown in the fo ...