关于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>();
相关推荐
2. **映射机制**: Hibernate支持XML映射文件(hbm.xml)和注解映射两种方式,让对象与数据库表之间建立映射关系。 3. **Session和Transaction**: Session是Hibernate的主要工作单元,负责保存、更新和检索对象。...
**标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...
《Hibernate组件映射:Annotation与XML的融合》 在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和...
现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的...
在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...
在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行数据持久化,提高开发效率。 一、...
- **hibernate3.jar**:Hibernate框架的核心库,提供了对象关系映射(ORM)功能。 - **javassist-3.9.0.GA.jar**:动态字节码操作库,被Hibernate用来生成代理类。 - **cglib-2.2.jar**:用于创建动态代理,也是...
而Hibernate注解则是其在ORM(对象关系映射)领域的进一步进化,它允许开发者将元数据直接嵌入到Java类和属性的声明中,从而避免了XML配置文件的繁琐。本篇将详细阐述Hibernate注解的相关知识。 一、Hibernate注解...
Hibernate是Java开发中的一个流行对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库。Hibernate Annotation则是Hibernate的一部分,它引入了Java注解,使得配置更加简洁,无需XML文件即可进行对象...
5. **整合Hibernate**:在实体类上使用@Entity,属性上使用@Column等注解,定义映射关系;在DAO接口上使用@Repository,利用Spring的代理机制实现事务控制。 通过这样的整合,开发者可以利用SpringMVC处理HTTP请求...
随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来映射对象关系模型(ORM)。这篇文档主要讨论的是Hibernate Annotation的使用方法,以及它如何替代传统的XML配置文件(*.hbm....
Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,而Hibernate则是一个强大的ORM(对象关系映射)工具,用于简化数据库操作。当我们将这两个框架整合在一起时,...
而Hibernate Annotation则是Hibernate框架中的一个重要组成部分,它引入了注解来声明对象与数据库表之间的映射关系,使得代码更加简洁,易于理解和维护。本文将详细解析Hibernate Annotation的相关知识,旨在为使用...
在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...
在Java世界中,Hibernate是一个流行的持久层框架,它极大地简化了数据库操作,尤其是在对象关系映射(ORM)方面。在这个项目中,我们将深入探讨Hibernate如何通过注解来简化数据库操作。 首先,让我们了解什么是...
Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...
Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来处理数据库操作。在Java开发中,Hibernate与Annotation的结合使用极大地简化了数据持久化的复杂性,使得开发人员无需编写大量...