`
jsx112
  • 浏览: 314818 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate 关系映射 annotation 版

阅读更多

关于mappedBy

双向关联是单向关联的扩展,只要一方写了配置(通常是 关联维护方即有外键的那方),另一方就可以通过 mappedBy 去找配置,不需要2边同时写.

 

关于@JoinColumn

@JoinColumn(name="外键名字段名") 可以用来指定外键,双向关联里的外键是不需要写 private 和 get / set 的.这个由hibernate自动维护.你表里设计了外键,但没用JoinColumn指定.hibernate会无视掉并以自己的命名方式想象一个外键,假如你数据库里的外键和这个想象外键对不上,报错.

 

也就是注意 @JoinColumn(name="外键名字段名")  注解写在哪里的问题.如果外键是自己的.@JoinColumn(name="外键名字段名")也写在自己这边,外键再写成成员变量就会报错.

 

怕漏写,总之外键的 private 和 get / set 是没报错就当成员变量写上.报错了去掉就是了.

 

关于 cascade 我大体是这么认为的.还有待验证.

注意这个是数组,所以 cascade={} .

先简单说明下,  A 类里有一个方法 getB() 用来获取 B 的对象

假如 getB() 方法上写了 cascade 注解,说明 A 的更删之类的操作会影响数据表内B的数据.

关联关系对这个没任何影响.总之就是A里获取B的方法上写上 cascade ,则 A 的操作就能影响数据库内具体的 B 数据.

多对多关系映射是通过中间表来维护关联,这个由hibernate自动维护中间表,不要写 cascade .

 

关于 fetch=FetchType.LAZY 我大体也是这么认为的.还有待验证.

先简单说明下,  A 类里有一个方法 getB() 用来获取 B 的对象

假如 getB() 方法上写了 fetch 注解,说明 A 类实体化后,除非使用 A.getB() 这个方法.否则不会立即从数据库里读取 B 的数据.

fetch=FetchType.EAGER 是默认值,就是立即读取.假如要立即读取B的数据.不写 fetch 就是了.

关联关系对这个没任何影响.

 



一对一关联

@OneToOne

一对一的主键关联实在看不出意义何在.反倒是获取实例的时候可能多N多没用的数据,所以不深究了...至于外键关联,直接看下面的一对多,多对一.

 


 

一对多,多对一关联

表字段说明

OneObject 表:

one_id 主键

 

ManyObject 表:

many_id 主键

one_id 外键,与OneObject 的主键关联



 

单向一对多

OneObject:

@OneToMany
@JoinColumn(name="one_id")

private Set<ManyObject> mb = new HashSet<ManyObject>();

 

ManyObject:

private int one_id; //这个就是和 @JoinColumn(name="one_id")  对应的 one_id .

不需要注解.

 


 

单向多对一

OneObject:

不需要注解.

 

ManyObject:

@ManyToOne
@JoinColumn(name="one_id")   //只需要在ManyObject指定外键为one_id.它就会去找 OneObject 的主键来对应.

private OneObject one;

 


 

双向一对多,双向多对一

OneObject:

@OneToMany(mappedBy="one") //告诉hibernate关联去找 one .

private Set<ManyObject> mb = new HashSet<ManyObject>();

 

ManyObject:

@ManyToOne
@JoinColumn(name="one_id")  //注意,在这里指定外键名后,不要在 写 private int one_id; 和它的get / set 方法了.这个改由hibernate维护.写上是要报错的.

private OneObject one;  //这个对应的就是 @OneToMany(mappedBy="one") 的 one.

 


 

多对多关联

表字段说明

ManyA 表:

a_id 主键

 

ManyB 表:

b_id 主键

 

A_B 表:(保存映射关系的中间表)

t_Aid 外键,与ManyA 的主键关联

t_Bid 外键,与ManyB 的主键关联

 


 

单向多对多

ManyA:

@ManyToMany
@JoinTable(
            name="A_B", //中间表名
            joinColumns={@JoinColumn(name="t_Aid")}, //设置ManyA自己在中间表的对应外键
            inverseJoinColumns={@JoinColumn(name="t_Bid") //设置对方(ManyB)在中间表的对应外键
        }
)

private Set<ManyB> mb = new HashSet<ManyB>();

 

ManyB:

不需要注解.

 


 

双向多对多

ManyA:

@ManyToMany
@JoinTable(
            name="A_B", //中间表名
            joinColumns={@JoinColumn(name="t_Aid")}, //设置ManyA自己在中间表的对应外键
            inverseJoinColumns={@JoinColumn(name="t_Bid") //设置对方(ManyB)在中间表的对应外键
        }
)

private Set<ManyB> mb = new HashSet<ManyB>();

 

ManyB:

@ManyToMany(mappedBy="mb") //告诉hibernate维护这个关联去找另一个对象的注解就可以了.不需要重复写.

private Set<ManyA> ma = new HashSet<ManyA>();

 

注:以上注释,ManyA的更删会影响到中间表A_B.但ManyB的更删不会影响到.假如2边都需要影响A_B表,则ManyB也写注解.注意 joinColumns 以及 inverseJoinColumns 的值对应不同.(其实就是两边都做成单向多对多)

ManyB:

@ManyToMany
@JoinTable(
            name="A_B",
            joinColumns={@JoinColumn(name="t_Bid")},
            inverseJoinColumns={@JoinColumn(name="t_Aid")
        }
 )

private Set<ManyA> ma = new HashSet<ManyA>();

分享到:
评论

相关推荐

    Hibernate distribution and annotation

    2. **映射机制**: Hibernate支持XML映射文件(hbm.xml)和注解映射两种方式,让对象与数据库表之间建立映射关系。 3. **Session和Transaction**: Session是Hibernate的主要工作单元,负责保存、更新和检索对象。...

    Hibernate继承映射(annotation)

    **标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...

    Hibernate组件映射(annotation/xml)

    《Hibernate组件映射:Annotation与XML的融合》 在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和...

    Hibernate Annotation jar

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

    hibernate-Annotation.jar

    在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...

    hibernate annotation hibernate3

    在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行数据持久化,提高开发效率。 一、...

    Struts2+Spring2+Hibernate3+Annotation所需JAR包

    - **hibernate3.jar**:Hibernate框架的核心库,提供了对象关系映射(ORM)功能。 - **javassist-3.9.0.GA.jar**:动态字节码操作库,被Hibernate用来生成代理类。 - **cglib-2.2.jar**:用于创建动态代理,也是...

    hibernate-annotation

    而Hibernate注解则是其在ORM(对象关系映射)领域的进一步进化,它允许开发者将元数据直接嵌入到Java类和属性的声明中,从而避免了XML配置文件的繁琐。本篇将详细阐述Hibernate注解的相关知识。 一、Hibernate注解...

    hibernate中文APIhibernate annotation 中文API

    Hibernate是Java开发中的一个流行对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库。Hibernate Annotation则是Hibernate的一部分,它引入了Java注解,使得配置更加简洁,无需XML文件即可进行对象...

    SpringMVC Spring Hibernate 框架整合 Annotation Maven Project

    5. **整合Hibernate**:在实体类上使用@Entity,属性上使用@Column等注解,定义映射关系;在DAO接口上使用@Repository,利用Spring的代理机制实现事务控制。 通过这样的整合,开发者可以利用SpringMVC处理HTTP请求...

    Hibernate Annotation 中文文档

    随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来映射对象关系模型(ORM)。这篇文档主要讨论的是Hibernate Annotation的使用方法,以及它如何替代传统的XML配置文件(*.hbm....

    完整版spring hibernate整合采用annotation

    Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,而Hibernate则是一个强大的ORM(对象关系映射)工具,用于简化数据库操作。当我们将这两个框架整合在一起时,...

    hibernate_annotation中文版

    而Hibernate Annotation则是Hibernate框架中的一个重要组成部分,它引入了注解来声明对象与数据库表之间的映射关系,使得代码更加简洁,易于理解和维护。本文将详细解析Hibernate Annotation的相关知识,旨在为使用...

    最全的Hibernate Annotation API文档

    在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...

    hibernate-annotation-helloword

    在Java世界中,Hibernate是一个流行的持久层框架,它极大地简化了数据库操作,尤其是在对象关系映射(ORM)方面。在这个项目中,我们将深入探讨Hibernate如何通过注解来简化数据库操作。 首先,让我们了解什么是...

    Hibernate_Annotation关联映射

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

    hibernate-annotation 所需要的jar包

    Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来处理数据库操作。在Java开发中,Hibernate与Annotation的结合使用极大地简化了数据持久化的复杂性,使得开发人员无需编写大量...

Global site tag (gtag.js) - Google Analytics