`

Hibernate annotation 的各种关系

 
阅读更多

转的:

 

一、@OneToOne

Java代码   收藏代码
  1. @Entity   
  2. public   class  User{  
  3.     private  Address address;  
  4.   
  5.     @OneToOne   
  6.     public  Address getAddress() {  
  7.         return  address;  
  8.     }  
  9.   
  10.     public   void  setAddress(Address address) {  
  11.         this .address = address;  
  12.     }  
  13. }  
  14.   
  15. @Entity   
  16. public   class  Address{  
  17.     private  User user;  
  18.   
  19.     @OneToOne (mappedBy =  "address" )  
  20.     public  User getUser() {  
  21.         return  user;  
  22.     }  
  23.   
  24.     public   void  setUser(User user) {  
  25.         this .user = user;  
  26.     }  
  27.   
  28. }  


1、两边都定义了@OneToOne,但都没有定义mappedBy,则user和address表都会生成到对方的外键,双方都是这个关系的拥有者。 
2、两边都定义了@OneToOne,如果user定义了mappedBy,则在address表生成到user的外键,address是这个关系的拥有者;如果address定义了mappedBy,则在user表生成到address的外键,user是这个关系的拥有者。 
二、@ManyToOne和@OneToMany 


Java代码   收藏代码
  1. @Entity   
  2. public   class  Employee {  
  3. private  Department department;  
  4.   
  5. @ManyToOne   
  6. public  Department getDepartment() {  
  7. return  department;  
  8. }  
  9.   
  10. public   void  setDepartment(Department department) {  
  11. this .department = department;  
  12. }  
  13. }  
  14.   
  15. @Entity   
  16. public   class  Department {  
  17. private  Set<Employee> employees =  new  HashSet<Employee>();  
  18.   
  19. @OneToMany (mappedBy= "department" )  
  20. public  Collection<Employee> getEmployees() {  
  21. return  employees;  
  22. }  
  23. public   void  setEmployees(Collection<Employee> employees) {  
  24. this .employees = employees;  
  25. }  
  26. }  

 

如果只写了@manytoone,不写其他配置,那么,会生成3张表,其中一张为关系表(默认为多对多)

所以最好是加上@JoinColumn(name="**id")


@ManyToOne中Many指的是本类(也就是声明@ManeyToOne的类),One是指关联类,也就是To前边的对应本类,后边的对应关联类。如果方法返回的是单数关联类则定义@ManyToOne,例如: 

Java代码   收藏代码
  1. @ManyToOne   
  2. public  Department getDepartment() {  
  3. return  department;  
  4. }  

方法返回的是Department,为单数关联类,对应@ManyToOne中的One; 
如果返回的是复数关联类则定义@OneToMany,例如: 
Java代码   收藏代码
  1. @OneToMany (mappedBy= "department" )  
  2. public  Collection<Employee> getEmployees() {  
  3. return  employees;  
  4. }  

方法返回的是Collection<Employee>,复数关联类,对应@OneToMany中的Many。其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。 

三、@ManyToMany 

Java代码   收藏代码
  1. @Entity   
  2. public   class  Book {  
  3. private  Set authors =  new  HashSet<Author>();  
  4.   
  5. @ManyToMany   
  6. public  Set<Author> getAuthors(){  
  7. return  authors;  
  8. }  
  9.       
  10. Public void  setAuthors(Set<Author> authors){  
  11.    This.authors = authors;  
  12. }  
  13. }  
  14.   
  15. @Entity   
  16. public   class  Author {  
  17. private  Set books =  new  HashSet<Book>();  
  18.   
  19.   
  20. @ManyToMany (mappedBy= "authors" )  
  21. public  Set<Book> getBooks(){  
  22. return  books;  
  23. }  
  24.   
  25. Public void  setBooks(Set<Book> books){  
  26.    This.books = books;  
  27. }  
  28. }  

@ManyToMany会生成中间表,具体表名和字段可以通过@AssociationTable来定义,默认的就可以了,同样关系的非拥有者,需要定义mappedBy属性。 

分享到:
评论

相关推荐

    Hibernate Annotation jar

    现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的...

    hibernate annotation 中文文档

    2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射...

    hibernate annotations3.4.0 GA.rar

    现在已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的映射方式将代替hibernate 的*....

    hibernate annotation帮助文档

    2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. 公式 2.4.3.3. 类型 2.4.3.4. 索引 2.4.3.5. @Parent 2.4.3.6. 生成的属性 2.4.4. 继承 2.4.5. 关于...

    hibernate 关系注解

    hibernate 关系注解:Hibernate Annotation关系映射

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    hibernate注解案例

    Hibernate 的注解学习 ExportDBAnnotation HibernateAnnotationUtils 【一对一】关系映射【一对多】关系映射 【多对多】关系映射 【composite复合主键】关系映射【component组件】关系映射

    joeylv#joscrapy#Hibernate的Annotation注解1

    声明为双向关联多对多关联关系多对多关联声明。实例:有如下两个实体,商品:Goods,分类Category。两者是多对一的关联关系。使用Hibernate Ann

    Hibernate笔记 马士兵

    第9课 Hibernate的重点学习:Hibernate的对象关系映射 12 一、对象---关系映射模式 12 二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置...

    Hibernate1对多1对1多对多关联映射例子源码含注解配置

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用...

    Hibernate关联关系的CRUD和集合映射(annotation)

    NULL 博文链接:https://cdxs2.iteye.com/blog/1934707

    hibernate笔记

    3 hibernate annotation references 5 环境准备 5 1 下载hibernate-distribution-3.3.2.GA-dist 5 2 下载hibernate-annotations-3[1].4.0.GA 5 3 注意阅读hibernate compatibility matrix(hibernate 网站download) 5...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate的中所有关系映射(分别用xml和jpa实现)

    hibernate的中关系映射分为一对一、一对多、多对一、多对多,其中有单双向之分。而一对一还有主键和外键区分。一共是九种。分别用xml配置文件和annotation实现。annotation的版本没有写测试程序,见谅。

    精通Java Web整合开发(第2版)

    12.4 hibernate 3.x的annotation解决之道532 12.4.1 为hibernate应用添加annotation支持532 12.4.2 annotation为hibernate改头换面532 12.4.3 hibernate中的常用annotation介绍534 12.4.4 一对一关联的annotation...

    Hibernate+中文文档

    19.2. 各种缓存提供商对缓存并发策略的支持情况(Cache Concurrency Strategy Support) 20.1. Summary 20.2. SchemaExport命令行选项 20.3. SchemaExport 连接属性 20.4. SchemaUpdate命令行选项 20.5. ...

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Hibernate中文详细学习文档

    5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent ...

    hibernate 3.3学习笔记

    第10课 模拟Hibernate原理(OR模拟) 第11课 Hibernate基础配置 第16课 关系映射(重点 Annotation注解)

Global site tag (gtag.js) - Google Analytics