在之前的第一次对框架的实际应用中,我使用的是Hibernate的xml配置方法,xml配置方法非常繁琐, 还是推荐所有使用Hibernate的人使用注解方式进行配置,在这篇文章中,我将列举出我们常用的注解配置,下面我将分为下面点进行阐述。

一、类级别注解

二、属性级别注解

三、关联映射关系

一、类级别注解

A)@Entity

@Entity:映射实体类型

@Entity(name=””):指定在数据库中与其对应的表名

在使用@Entity时必须存在主键。

B)  @Table(name=””, catalog=””, schema=””)

与@Entity配合使用,name属性代表在数据库中与其对应的表名

Catalog 可选:表示Catalog名称 默认为””

Schema 可选:表示Schema名称 默认为””

C)  @Embeddable

从面向对象的角度,表示该类可以被嵌入到其他类中。

从关系型数据库的角度,表示该类中标识的属性会映射成列之后嵌入到其他表中。

在正常的使用下,可以将该注解标识的属性嵌入到其他类中充当属性,但存在一种特殊情况,即该嵌入类充当主键的情况,将在@EmbeddedId进行说明。

二、属性级别注解

A)  @Id:映射到数据库中充当主键,该注解可以同时标识多个属性,此时充当联合主键。

若作联合主键使用,该类必须实现serializable接口

String型属性作主键时,必须限定String长度,长度最长不要超过40位,否则会生成主键失败

B)  @GeneratedValue(strategy=””, generator=””)

Strategy 可以有四种取值分别是:

GenerationType.AUTO:根据底层数据库自动选择

GenerationType.INDENTITY:根据数据库的Identity字段生成

GenerationType.SEQUENCE:使用Sequence在决定主键的取值

GenerationType.TABLE:使用指定的表决定主键的取值,结合 @TableGenerator使用

Example:

@Id

@TableGenerator(table=”tab_cat_gen”, allocationSize=1)

@GeneratedValue(Strategy=GenerationType.TABLE)

C)  @Column

常用属性:

name : 与该属性对应的列的名称

nullable: 与该属性对应的列的值是否可以为null

uinique: 与该属性对应的列的值是否唯一

length:与该属性对应的列的域的长度上限

insertable: 表示在orm框架中插入一条记录时,该字段是否出现在insert语 句中。

updateable: 表示在orm框架中更新一条记录时,该字段是否出现在insert语 句中。

D)  @Embedded 与 @EmbeddedId

被标识该注解的属性代表该属性的类是一个嵌入类,同时,该嵌入类必须带有 @Embeddable注解

当该属性被 标识为主键时,必须标识为@EmbeddedId,并且同时满足下面几个条件:

1实现Serializable接口

2有磨人的public的无参构造方法。

3实现equals() 和 HashCode() 方法。

E)  @Transient:

该注解 该属性并不是一个映射倒数据库表的字段属性,ORM框架将会忽略该属性。

三、关系映射注解

A)单向一对一外键关联

设存在A、B双方存在一对一关系

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name=””,unique=true)

其中A方标识上以上注解,name属性代表着与其对应的B方的列名

如果B方使用@Column重新指定了列名,该name应该指向修改过后的名字

B)  双向一对一外键关联

在a)的基础上,同时给B方加上以下注解

@OneToOne(mappedBy=””)

mappedBy指向A方的属性变量名

C) 单向多对一外键关联

设A方维护多的关系,B方维护一的关系

需要从A方到B方的多对一的单向关联关系

@ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)

@JoinColumn(name="")

本质是需要在A方维护一个外键

只需要在A方配置以上注解,fetch属性代表对该属性的获取策略,作为多的一方, 需要积极(eager)地获取以节省资源。

@JoinColumn(name=””)中name属性代表要参照的列名,而非属性名。

D)  单向一对多外键关联

@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.LAZY)

@JoinColumn(name="")

一对多在数据库中的体现形式与多对一在数据库中的体现形式一样,都是需要在多的 一方中维护一个参照一的一方的一个外键,但是不同的是,我们需要通过配置注解, 使得我们可以使用一的一方的对象获取到一个(多的一方)的集合

作为一的一方,我们需要使用延迟加载技术(fetch=FetchType.LAZY),否则时 时刻刻都要对持有的集合进行维护,十分损耗服务器资源。

E)  双向一对多外键关联

双向一对多外键关联 =  单向一对多外键关联 + 单向多对一外键关联

只需要把这两种的配置迭加即可

F)  单向多对多外键关联

首先需要说明的是,我们在前面使用的几种关联关系中,我们都只要直接的使用双方 对应的两个表就足够我们完成对关系的维护。

但是在多对多的两种关系中,我们无法使用两个表,而是需要一个中间表来维护两个 表之间的多对多的关系

多对多的关系重点就是在指定中间表。

假设A、B双方存在多对多的关系:

只需要A、B中任意一方标识以下注解:

@ManyToMany

@JoinTable(

name="",

joinColumns={@JoinColumn(name="")},

inverseJoinColumns={@JoinColumn(name=""),

@JoinColumn(name=""),

@JoinColumn(name=""),

@JoinColumn(name="")}

)

@JoinTable用于标识中间表

name 表示表名

joinColumns 和inverseJoinColumn中可以指定对应的的外键列名,如果A、B 中存在联合主键,只需要指定多个@JoinColumn即可。

G)  双向多对多外键关联

双向多对多的外键关联只需要在单向的基础上,在B方加上一下注解(假设A方已经 维护好单向多对多关系):

@ManyToMany(mappedBy="")

mappedBy指向在A方中的变量属性名即可。

Hibernate注解配置的更多相关文章

  1. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  2. Hibernate注解配置与XML配置区别

    注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...

  3. hibernate注解配置举例说明

    Hibernate Annotation   (Hibernate 注解)   进入:http://www.hibernate.org 说明文档: 英文:http://docs.jboss.org/h ...

  4. hibernate 注解配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/X

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  6. 用户、角色、权限三者多对多用hibernate的一对多注解配置

    用户.角色.权限三者多对多用hibernate的一对多注解配置 //权限表@Table(name = "p")public class P { @Id @GeneratedValu ...

  7. Mingyang.net:注解配置Hibernate时报错Unknown Entity

    注解配置时报错:org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User org.hibernate.Map ...

  8. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  9. spring与hibernate整合配置基于Annotation注解方式管理实务

    1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...

随机推荐

  1. 【C#进阶系列】22 CLR寄宿和AppDomain

    关于寄宿和AppDomain 微软开发CLR时,将它实现成包含在一个DLL中的COM服务器. 任何Windows应用程序都能寄宿(容纳)CLR.(简单来讲,就是CLR在一个DLL中,通过引用这个DLL ...

  2. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器

    很久没写博客了,这段时间情绪不那么稳定,还是心态的问题... 就简单写个问题的解决方法吧,其实最近遇到的问题蛮多的,就拿这个解决过后又遇到的来写吧. 正如标题一样:VS2013 无法为目标平台“Mic ...

  3. Java程序,基本数据类型、、数据类型转换、变量和常量、常用运算符

    一.基本数据类型 整数类型:byte.short. int(常用).long(较常用)     定义某个变量          int  a=10: 浮点类型(小数):float.double(常用) ...

  4. Python默认版本修改

    Python默认版本修改 当电脑安装了多个版本的Python,而Shell中默认的Python不是你想要的,这个时候就需要对Python的默认版本进行修改. 在Windows中,可以通过修改环境变量的 ...

  5. 转载:《TypeScript 中文入门教程》 10、混入

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 除了传统的面向对象继承方式,还流行一种通过可重用组件创建类的方式,就是联合另一个 ...

  6. Cats(4)- 叠加Free程序运算结果,Stacking monadic result types

    在前面的几篇关于Free编程的讨论示范中我们均使用了基础类型的运算结果.但在实际应用中因为需要考虑运算中出现异常的情况,常常会需要到更高阶复杂的运算结果类型如Option.Xor等.因为Monad无法 ...

  7. 【PHP资源】PHP 资源大全

    看到这篇文章不错,转来收藏 依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle ...

  8. 让网站动起来!12款优秀的 jQuery 动画插件推荐

    如今,大多数设计师和开发人员被要客户要求开发动态的网站.创造视觉震撼和醒目的动态网站是艰巨的任务,因为它需要大量的努力和创造力.在网络上有大量的工具和插件可用于创建网站动画.许多开发人员正在使用 HT ...

  9. HTML5中使用图片传递密文

    上面的两张图片中,你能看出有什么不同吗? 右图使用 html5 canvas api 中的 getImageData 和 putImageData 函数嵌入了一段文字. 道理很简单,getImageD ...

  10. FIS3的简单使用

    序言: 最近在收集前端的优化工具,随便一搜,厉害了word哥,有grunt.gulp.FIS3.webpack等等,简直就是眼花缭乱!前辈们对于他们的评价各有千秋,于是乎就想每个都来用一遍(之前已经倒 ...