hibernate 实体关系映射笔记

@常用属性说明:

@Entity:实体类

@Table:指定对应数据表

@Id:主键,使用可以为null值的类型,如果实体类没有保存到数据库是一个临时状态

@Column:配置普通属性,除了主键外,java基本类型的属性

@Base:普通属性的加载方式

@GeneratedValue:主键生成策略

@Temporal:日期类型(DATE,TIME还是TIMESTAMP),如果属性类型是java.util.Date(是以上3个类的父类)类型时才需要使用该@声明具体的日期类型

@Transient:临时属性

@Version:版本属性,配置乐观锁

hibernate实体关联映射:

一对一单向:

一段:另一端实体属性:@OneToOne(cascade),@JoinColumn(name=外键名,unique=true)

另一端:

一段数据库:另一端实体的外键:表名_id

另一端数据库:

一对一双向:

一段:另一端实体属性:@OneToOne(cascade),@JoinColumn(name=外键名,unique=true)

另一端:另一端实体属性:@OneToOne(mappedBy=另一端属性名)

一段数据库:另一端实体的外键:表名_id

另一端数据库:

一对一双向(主键):

一段:@Id,@GeneratedValue,另一端实体属性:@OneToOne,@PrimaryKeyJoinColumn

另一端:@Id,不能使用@GeneratedValue(与另一端使用相同主键),另一端实体属性:@OneToOne,@PrimaryKeyJoinColumn

一段数据库:没有关联,根据主键判断

另一端数据库:没有关联,根据主键判断

一对多单向:

一段:多端实体集合属性:@OneToMany(fetch,cascade,targetEntity(使用范型可以省略)),@JoinColumns(value={@JoinColumn(name="外键名"),referencedColumnName="另一端id"})

多端:

一段数据库:

多端数据库:一段实体的外键:表名_id

多对一单向:

一段:

多端:一段实体属性:@ManyToOne(CascadeType,fetch),@JoinColumn(外键名)

一段数据库:

多端数据库:一段实体的外键:表名_id

一对多双向(多对一双向):

一段:多端实体集合属性:@OneToMany(mappedBy="多端实体类中的一段属性名")

多端:一段实体属性:@ManyToOne(fetch,cascadeType),@JoinColumn(外键名)

一段数据库:

多端数据库:一段实体的外键:表名_id

多对多单向:

多段:另一端实体集合属性:@ManyToMany(fetch,cascade,),@JoinTable(name,JoinColumns,inverseJoinColumns)

另一多端:

多段数据库:

另一端端数据库:

中间表(表1_表2):外键1:表1_id,外键2:表2_id

多对多双向:

多段:另一端实体集合属性:@ManyToMany(fetch,cascade,),@JoinTable(name,JoinColumns,inverseJoinColumns)

另一多端:@ManyToMany(mappedBy=另一多端实体集合属性名)

多段数据库:

另一端端数据库:

中间表(表1_表2):外键1:表1_id,外键2:表2_id

1 双边关系中,控制权一般交给多端,由mappedBy指定,配置信息要到多端找

2 mappedBy把控制权交给另一端(另一端中的属性名),另一端配置同单向配置完全相同

3 多对多属性必须使用@JoinTable指定中间表的配置,其中name指定表名,joinColumns指定该表与中间表的对应关系,inverseJoinColumns指定另一端与中间表的关系

4 mappedBy表示该属性是反向属性,与另一端实体类的指定的属性对应

5 Map映射:集合属性可以使用Map类型,Map使用索引-值属性对,速度快,配置时跟@OneToMany,@ManyToMany一样,只需再增加@MapKey即可,如:

@MapKey(name = "name")//配置数据库列名,使用该字段索引数据

private Map<String,Student> students = new new HashSet<String,Student>();

hibernate 实体关系映射笔记,布布扣,bubuko.com

时间: 2024-09-14 01:58:35

hibernate 实体关系映射笔记的相关文章

Hibernate实体关系映射(OneToMany、ManyToOne双边)——完整实例

双边关系是最常见的配置.在多方有一方的引用,一方也有多方的引用.双边关系能够很方便地查询数据.看一个班级与学生的双边关系. 班级(Clazz类)与学生(Student类):一对多关系.班级中有学生属性,学生中有班级属性,二者是双边关系.(Class是关键字,不能用) 分析:Clazz为一方,Student为多方.Clazz中有Student集合属性,Student中也有Clazz类型属性. 环境:MyEclipse10,新建Web Project名为hibernate 1.Clazz.java

hibernate 对象关系映射文件详解

POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义. 映射文件的扩展名为.hbm.xml 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系 映射文件说明 hibernate-mapping 类层次:class 主键:id 基本类型:property 实体引用类: many-to-one

持久化API(JPA)系列(六)实体关系映射(ORM)之映射类型

ORM实体关系映射,即将数据库中的数据表及表之间的关系,通过实体Bean及实体Bean之间的关系表现出来,实现通过操作实体Bean来操作数据库. ORM(Object-Relation-Map),其中Object表示实体Bean,Relation表示数据表,Map表示实体Bean与数据表的映射. 由于EJB3中的实体Bean采用JPA框架,因此这里的ORM就是指JPA映射.它的作用也类似于Hibernate.iBATIS.JDO.TopLink等持久化层框架中的实体关系映射. 根据表与表之间的关

Hibernate Annotation关系映射, 级联cascade属性

Hibernate Annotation关系映射, 级联cascade属性一. Hibernate Annotation关系映射 1.一对一外键关联映射(单向) 2.一对一外键关联映射(双向) 3.一对一主键关联映射(不重要)在这不演示 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成.Annotation注解一对

OrchardNoCMS实体关系映射扩展

在OrchardNoCMS中,默认的系统会把实体关系映射保存到mappings.bin文件中. 如果不进行任何修改,默认的可以自动保存关系映射的model是有很大限制的. 条件是model的命名空间必须是以Orchard开头,以Models结尾.CompositionStrategy.cs中可以看到判断一个类是否需要保存映射关系的代码: 假设我们现在想按照公司的名称为Model的命名空间,加添完Model运行后,你会发现,在数据库中进行增删改查是没有数据的,因为根本没有生成关系映射. 你可以通过

JPA总结——实体关系映射(一对多@OneToMany)

JPA总结——实体关系映射(一对多@OneToMany) 并注明来源: http://blog.sina.com.cn/s/blog_49fd52cf0100scql.html 一对多模型(单向)说明:一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息.客户和地址是一对多的关系,并且客户与地址是单向关联的关系. 映射策略# 外键关联:两个表的关系定义在一个表中:# 表关联:两个表的关系单独定义一个表中通过一个中间表来关联.映射策略——外键关联 表结构如下: 1 TABLE custom

持久化API(JPA)系列(八)实体关系映射(ORM)之单表映射@EmbeddedId

接上文<持久化API(JPA)系列(七)实体关系映射(ORM)之单表映射@IdClass> 本文将介绍<联合主键:使用@EmbeddedId嵌入外部主键> 上文是通过@IdClass引用外部主键,联合主键也可以采用嵌入式主键替代. 1)新建外部主键类Family2.java 设置联合主键man和woman,因此外部主键也需要定义两个相同的变量,并添加一个以两个变量为输入的构造函数,同时添加getter/setter函数. 主键类必须满足: 1.必须实现Serializable接口,

hibernate继承关系映射和java反射机制的运用

转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享 Notes:hibernate元数据的运用:uuid的概念:java的反射机制,“因为抽象类无法new出对象来,所以就要用java反射机制”,“TcommTable tomm = (TcommTable) Class.forName(allName).newInstance();”: hibernate继承关系映射大概有5种,这5种继承关系映射里面,我觉

Hibernate之实体关系映射

延迟加载与即时加载 例如Person类和Email类是一对多关系,如果设为即时加载,当加载Person时,会自动加载Email,如果设置为延迟加载,当第一次调用person.getEmails()时才会执行SQL语句加载Email 注解配置时,@OnetToMany(Fetch = FetchType.EAGER)为即时加载,Fetch = FetchType.LAZY为延迟加载 延迟加载和即时加载的策略适用于所有一对多.多对一.多对多等所有的实体关系 一般来说,延迟加载要比即时加载节省资源,但