Hibernate-注解
一, 为啥用注解
Hibernate注解使得原本放在xml文件中的信息直接表现在类中
为什么要用注解呢,因为注解可以简洁快速地在编写代码的同时实现映射关系
注解的好处就是语言简洁,即插即用. 坏处就是和xml相比,分散到各个class文件中,不方便修改.
用注解,需要在hibernate.cfg.xml文件中添加使用了注解的实体类的标签
<mapping class="com.test.pojo.Person"/>
二,有哪些注解,咋用?
1.先看示例代码:
@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Column(name = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
这是一个简单的使用了注解进行映射的类,可以看到其中的注解所代表的含义.
类注解:
(1)@Entity: 表示这是一个实体类,用于映射一个表
(2)@Table(name="person"): 表示这个类映射的表的名字为person
属性注解:
(1)@Id: 表示这个属性是表中的主键
(2)@GeneratedValue(strategy = GenerationType.IDENTITY)表示主键的自增长方式
strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
GenerationType.AUTO 主键由程序控制
GenerationType.TABLE 使用一个特定的数据库表格来保存主键
GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用)
generator 指定生成主键使用的生成器(可能是orcale中的序列)。
(3)@Column(name="id): 表示这个属性映射到表中的"id"字段
name 可选,列名(默认值是属性名)
unique 可选,是否在该列上设置唯一约束(默认值false)
nullable 可选,是否设置该列的值可以为空(默认值false)
insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,列长度(默认值255)
precision 可选,列十进制精度(decimal precision)(默认值0)
scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
关系注解:
(1) @ManyToOne: 表示多对一关系, (注解下是一个对象的getter)
@JoinColumn(name="tid") 表示, 这个关系在表中对应的字段为tid
@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age;
private Teacher teacher; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Column(name = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @ManyToOne
@JoinColumn(name="tid")
public Teacher getTeacher(){
return teacher;
} public void setTeacher(Teacher teacher){
this.teacher = teacher
}
}
(2)@OneToMany(fetch=FetchType.EAGER): 一对多关系, FetchType表示是否延迟加载 (注解下是一个集合的getter)
@JoinColumn: 表示映射字段
@Entity
@Table(name = "teacher_")
public class Teacher {
private int id;
private String name;
private Set<Person> persons; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="tid")
public Set<Person> getPersons(){
return persons;
} public void setPersons(Set<Person> persons){
this.persons = persons;
}
}
(3)@ManyToMany: 多对多注解
@JoinTable: 多对多关系映射的表
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) //表示级联方式和是否延迟加载
@JoinTable( //表示多对多关系的表的映射
name="user_product", //表名
joinColumns=@JoinColumn(name="uid"),
inverseJoinColumns=@JoinColumn(name="pid")
)
public Set<Product> getProducts() {
return products;
}
这两个注解需要在有多对多关系的类的集合的getter中都写上.
Hibernate-注解的更多相关文章
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- Hibernate注解----类级别注解以及属性注解详解----图片版本
这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...
- hibernate注解随笔—10月8日
hibernate注解(herbinate4 jar包注解可用,使用hibernate3.3注解失败) 如果javabean与数据库中表名一致(不区分大小写),则注解不用写@Table(name=&q ...
- Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- Hibernate注解错误之- org.hibernate.MappingException: Could not determine type for:
Hibernate 注解 @OneToOne 时候,出现以下错误,经调试,发现 注解要么全部放在字段上,要么全部放在get方法上,不能混合使用! org.hibernate.MappingExcept ...
- Hibernate 注解 没有加@Column一样会在数据库创建这些字段
Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...
随机推荐
- HTML5移动端触摸事件
一.移动端事件问题 1.click事件300ms延迟问题 2007年第一代iphone发布,移动端Safari首创双击缩放功能,原理是click一次后,经过300ms之后检测是否再有一次click,如 ...
- Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: java.sql.SQLExcepti ...
- SkiaSharp图像处理
SkiaSharp图像处理 .NET Core使用skiasharp文字头像生成方案(基于docker发布) 一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET ...
- 我的Qt历程1:第一个Qt程序
1.启动Qt,按照红圈内所标注顺序执行操作. 2.按下Choose键后,在“名称”栏目里给程序起名字(不要是汉字名字). 3.在“创建路径”栏目里指定程序将要使用的路径(不能用汉字路径). 4.在“类 ...
- Linux centos nginx下载安装初步
下载源码包解压编译 1.下载 # wget http://nginx.org/download/nginx-1.9.9.tar.gz 2.解压 # tar xvf nginx-1.9.9.tar.gz ...
- LVS实现负载均衡安装配置详解
=========实践LVS/NAT模式========== 1.实验环境 三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.2 ...
- Base 64 & decodeURIComponent
Base 64 & decodeURIComponent js btoa() & atob() let obj = [{"key":"q",&q ...
- https 自签名SSL证书
介绍 TLS或称传输层安全性,及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议. 使用这种技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部各方拦截 ...
- for循环增强
for(声明语句 : 表达式) { //代码句子 } 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配.其作用域限定在循环语句块,其值与此时数组元素的值相等. 表达式:表达式是要访问的 ...
- table 里输入rules 验证
HTML <el-form ref='from' :model="fromData"> <el-table ref="tableman" bo ...