以某个实际场景为例,现在两张表:用户表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. WOPI的安装文档方法

    Office Web Apps安装部署 系统要求为Windows Server 2012, 注意:安装Office Web Apps的服务器除了Office Web Apps之外,不能安装其他应用.包 ...

  2. centos 7 下多网卡绑定+ vlan 网卡配置

    一.前言 CentOS7之前系统提供给用户的是bonding driver来实现链路聚合,实际上bonding适用于大多数应用.Bonding driver的架构是由内核空间完全控制.管理. Team ...

  3. git config --global user.email

    加上这个就ok

  4. Appium+python自动化1-环境搭建

    一.前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+ ...

  5. 取得<asp:TextBox中的值:

     取得<asp:TextBox中的值:  var a= document.getElementById("<%= (ID名).ClientID %>").valu ...

  6. TableView下拉刷新崩溃解决办法

    return cell;上边加判断 if(self.dataArray.count<1){ return cell; }

  7. IIS挂起网站配置文件地址

    “C/用户/Administrator/我的文档/IISExpress/Config/applicationhost”

  8. tomcat-maven-plugin的使用

    maven有一个把web应用部署到tomcat下的插件 tomcat-maven-plugin , 我们可以使用这个插件把web应用一键式的部署到一个远程的tomcat中. 插件的url: http: ...

  9. golang语言中bytes包的常用函数,Reader和Buffer的使用

    bytes中常用函数的使用: package main; import ( "bytes" "fmt" "unicode" ) //byte ...

  10. go语言net包udp socket的使用

    udp与tcp的不同在于客户端请求方式不同,udp缺少Accept函数. 一个简单的udp客户端: package main; import ( "net" "log&q ...