Hibernate注解配置
在之前的第一次对框架的实际应用中,我使用的是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注解配置的更多相关文章
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- Hibernate注解配置与XML配置区别
注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...
- hibernate注解配置举例说明
Hibernate Annotation (Hibernate 注解) 进入:http://www.hibernate.org 说明文档: 英文:http://docs.jboss.org/h ...
- 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 ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- 用户、角色、权限三者多对多用hibernate的一对多注解配置
用户.角色.权限三者多对多用hibernate的一对多注解配置 //权限表@Table(name = "p")public class P { @Id @GeneratedValu ...
- Mingyang.net:注解配置Hibernate时报错Unknown Entity
注解配置时报错:org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User org.hibernate.Map ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
- spring与hibernate整合配置基于Annotation注解方式管理实务
1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 <!-- jdbc连接信息 --> <context:property-pla ...
随机推荐
- 5、python第一天作业
作业一:编写登陆接口 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 分析: 1.流程控制图 2.编写思路 以r+(读写模式)打开文件,读取文件内容字符串,再写入文件,以字符串的长 ...
- Zookeeper Api(java)入门与应用(转)
如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...
- Linux-安装Oracle(CentOS-Oracle 12c)
第一步:网络连接,在我的上一篇博客中有介绍,不再多说. 网络连接的目的:为了能使用yum命令,在网上直接下载文件. 第二步:前往oracle官网下载12c database服务器端的两个文件:(安装在 ...
- java——获取从控制台输入的数据的方法
一.使用标准输入串System.in System.in.read(); //一次只读入一个字节数据,但是我们往往希望获得的是一个字符串或者一组数字 二.使用Scanner获得一个字符串或一组 ...
- 3、ASP.NET MVC入门到精通——Entity Framework增删改查
这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
1.1 架构结构图 1.1.1 层次示意图 1.1.2 模型对象示意图 1.2 IO管理器 IO管理器是对串口和网络通讯链路的管理.调度.针对串口和网络通讯链路的特点,在IO管 ...
- discuz 3.x 核心文件class_core.php解析
class_core.php是discuz 3.x的核心文件,几乎所有PHP脚本都有引用此文件初始化论坛运行环境.以下解析引用3.2版discuz. line 12-15:常量定义IN_DISCUZ: ...
- [ASP.NET Core] Getting Started
前言 本篇文章介绍如何快速建立一个ASP.NET Core应用程序,为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 环境 建立一个ASP.NET Core应用程序,首先要 ...
- Listview详解
Listview应该是最为常见的控件.对于大多数规则排列的界面,几乎都可以用ListView进行编写.对于单一界面来说,ListView既是最难的控件,又是使用最为频繁的控件.ListView 通常用 ...
- iOS开发工程师面试题(二)
1.手写冒泡跟插入排序 冒泡排序来源于生活常识,相当于把数组竖起来,轻的向上,重的向下.void bubbleSort(int[] unsorted) { ; i < unsorted.Leng ...