【hibernate】常用注解
【hibernate】常用注解
转载:https://www.cnblogs.com/yangchongxing/p/10357118.html
目录
========================================================
1、@Entity 实体
2、@Table 表
3、@Id 和 @GeneratedValue 主键及生成策略
4、@Column 列
5、@DynamicInsert 和 @DynamicUpdate 动态字段
6、@Immutable 不变实体
7、@Basic 非空约束
8、@NotNull 非空检查
9、@Access 属性访问
10、@Formula 派生属性
11、@ColumnTransformer 转换列值
12、@Generated 默认值
13、@Temporal 时序属性
14、@CreationTimestamp和@UpdateTimestamp 创建时间戳和更新时间戳
15、@Enumerated 枚举类型
16、@Embeddable 可嵌入组件
17、@Lob 大数据类型
18、@Type 类型适配器
19、@Convert 转换器
20、@MappedSuperclass 不持久化超类属性
21、@AttributeOverrides 和 @AttributeOverride 重写属性
22、@Inheritance 继承策略
========================================================
1、@Entity 实体
声明持久化实体,不带 name 参数时表明和实体名相同,带参数重写表明 @Entity(name="ycx_user")
2、@Table 表
重写表名 @Table(name="ycx_user")
3、@Id 和 @GeneratedValue 主键及生成策略
主键和主键生成策略 @GeneratedValue(generator="id_generator") 或者 @GeneratedValue(strategy=GenerationType.SEQUENCE)
4、@Column 列
name="列名"
table=“列属表名”
nullable=false 不能为空,生成非空约束
length=3 字段长度
insertable=false 不包含 INSERT
updatable=false 不包含 UPDATE
列声明 @Column(name="表明", nullable=false),nullable=false 声明数据库非空约束
5、@DynamicInsert 和 @DynamicUpdate 动态字段
动态 SQL 生成,@DynamicInsert 和 @DynamicUpdate,通过启用动态插入和更新,就可以告知 hibernate 在需要时生成 SQL 字符串
6、@Immutable 不变实体
让实体不可变,这样 hibernate 永远不会执行 update 语句,同时可以进行一些优化,比如对不可变类不进行脏检查。
7、@Basic 非空约束
@Basic(optional=false) 声明数据库非空约束
8、@NotNull 非空检查
@NotNull(message="消息内容"),实体非空注解,但是这个在生成数据库结构时会被忽略,在实体保存校验时起作用。
要想在数据库中生成非空约束,必须结合 @Column(nullable=false) 或者 @Basic(optional=false)
9、@Access 属性访问
重写默认的访问行为,字段访问或者属性访问,已经注解过的实体会从强制的 @Id 注解位置继承访问行为,@Id 在字段上则继承字段访问,在 getter 方法上则继承属性访问。
@Access(AccessType.FIELD) 字段访问
@Access(AccessType.PROPERTY) 属性访问
当 @Access 在实体级别设置则会影响实体的所有访问策略,同样 @Access 也可以重写单个属性的访问策略
若默认是字段访问,在字段上添加 @Access(AccessType.PROPERTY) 则被修改为属性访问
若默认是属性访问,在 getter 方法上添加 @Access(AccessType.FIELD) 则被修改为字段访问
10、@Formula 派生属性
运行时通过 @Formula 估算出来,不会出现在 UPDATE 和 INSERT 中,只会出现在 SELECT 中,可以包含 SQL 函数和子查询。
例如 数据库中没有全名而实体中有 @Formula("concat(firstname,'-',lastname)")
11、@ColumnTransformer 转换列值
数据库中存储重量 weight 单位是克,实体中使用千克
@Column(name="weight")
@org.hibernate.annotations.ColumnTransformer(read="weight / 1000",write="? * 1000")
protected int kilogramWeight;
12、@Generated 默认值
自动刷新数据库生成的值,如触发器在每次插入和更新后更新的值。使用 @Generated 注解在每次执行 INSERT 和 UPDATE 后委托给 Hibernate 自动查询。
比如插入用户后给一个默认国籍
触发器
BEGIN
set new.nationality = 'CN';
END
java
@Column(insertable=false,updatable=false)
@org.hibernate.annotations.ColumnDefault("'CN'") //在 Hibernate 导出 SQL 架构 DDL 时设置列的默认值
@org.hibernate.annotations.Generated(org.hibernate.annotations.GenerationTime.INSERT)
protected String nationality;
测试
@Test
public void testInsert() {
this.session.beginTransaction();
User u = new User();
u.setUsername("admin");
u.setFirstname("Tom");
u.setLastname("Green");
u.setKilogramWeight(62);
this.session.persist(u);
this.session.getTransaction().commit(); //事务提交后才能得到最新的值
System.out.println(u.getId() + " Hibernate 自动刷新数据库触发器生成的值:" + u.getNationality());
assertTrue( true );
}
13、@Temporal 时序属性
JPA 规范要求使用 @Temporal 注解时序属性,以声明所映射列的准确 SQL 数据库类型。当没有提供时 Hibernate 会默认使用 TemporalType.TIMESTAMP。
Java时序类型 java.util.Date;、java.util.Calendar;、java.sql.Date;、java.sql.Time;、java.sql.Timestamp;
TemporalType 选项 DATE、TIME、TIMESTAMP
14、@CreationTimestamp和@UpdateTimestamp 创建时间戳和更新时间戳
当没有提供 @Temporal 时 Hibernate 会默认使用 TemporalType.TIMESTAMP
@Temporal(TemporalType.TIMESTAMP)
@Column(updatable=false)
@org.hibernate.annotations.CreationTimestamp
protected Date createOn;
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable=false)
@org.hibernate.annotations.UpdateTimestamp
protected Date updateOn;
当执行插入时 Hibernate 自动给 createOn 赋值,当执行更新时 Hibernate 自动给 updateOn 赋值。
15、@Enumerated 枚举类型
默认 Hibernate 会存储 EnumType.ORDINAL 位置,这种很脆弱。EnumType.STRING 存储枚举值的标签,这样变更不会影响
@Enumerated(EnumType.STRING)
private Sex sex;
16、@Embeddable 可嵌入组件
@Embeddable
public class Address {
@NotNull
@Column(nullable=false)
protected String street; @NotNull
@Column(nullable=false)
protected String zipcode; @NotNull
@Column(nullable=false)
protected String city; public Address() {}
public Address(String street,String zipcode,String city) {
this.street = street;
this.zipcode = zipcode;
this.city = city;
}
@Override
public String toString() {
return "Address [street=" + street + ", zipcode=" + zipcode + ", city=" + city + "]";
}
}
嵌入式组件
protected Address address;
重写嵌入式组件
@AttributeOverrides({
@AttributeOverride(name="street",column=@Column(name="billing_street")),
@AttributeOverride(name="zipcode",column=@Column(name="billing_zipcode")),
@AttributeOverride(name="city",column=@Column(name="billing_city"))
})
protected Address billingAddress;
17、@Lob
二进制数据和大数据
18、@Type 类型适配器
@org.hibernate.annotations.Type(type="yes_no")
protected boolean verify;
@org.hibernate.annotations.Type(type="true_false")
protected boolean verify;
19、@Convert 转换器
@Convert(converter = MoneyConverter.class,disableConversion=false)
protected Money money;
20、@MappedSuperclass 不持久化超类属性
使用 @Entity 映射具体类,要想超类的属性被忽略并且不持久化,则必须使用 @MappedSuperclass
21、@AttributeOverrides 和 @AttributeOverride 重写属性
子类重写从父类继承的字段和属性
类重写嵌入式字段和属性
22、@Inheritance 继承策略
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 每个带有联合的具体类使用一个表
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 每个类层次结构使用一个表
@Inheritance(strategy=InheritanceType.JOINED)
【hibernate】常用注解的更多相关文章
- hibernate 常用注解
转自:http://blog.csdn.net/numbibi/article/details/7739441 @content ejb3注解的API定义在javax.persistence.*包里面 ...
- 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ...
- Hibernate框架注解
1.使用Hibernate注解的步骤 1.添加jar包 Hibernate-annotations.jar ...
- Hibernate的注解方法的使用
1.配置映射关系的xml方式 我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配.其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的 ...
- spring(二、bean生命周期、用到的设计模式、常用注解)
spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...
- SG-UAP常用注解介绍
注解基本介绍 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可 ...
- 1.1Spring Boot 环境配置和常用注解
Spring Boot常用注解:@Service: 注解在类上,表示这是一个业务层bean@Controller:注解在类上,表示这是一个控制层bean@Repository: 注解在类上,表示这是一 ...
- SpringDataJpa实体类常用注解
最近公司在使用SpringDataJpa时,需要创建实体类,通过实体类来创建数据库表结构,生成数据库表. 下面我们就来看下在创建实体类时一些常用的注解吧!!! 1.实体类常用注解 @Entity 标识 ...
- spring boot的一些常用注解
spring boot的一些常用注解: 使用@SpringBootApplication注释: 许多Spring Boot开发人员喜欢他们的应用程序使用自动配置,组件扫描,并能够在其“应用程序类”上定 ...
随机推荐
- ArcGIS API For Javascript :双屏(多屏)地图联动的方法
在遇到地图对比的应用场景下,我们需要双屏地图或者多屏地图来满足我们的业务需求. 解决思路:首先生成两份(多份)地图,然后通过监听地图缩放拖拽,用地图四至将不同的地图对象做绑定,实现多地图联动. 前端部 ...
- Vue学习之Vue模拟后台数据
前后端项目的开发,需要前端和后端同时进行开发,有时后端开发人员还未完成API接口可以提供给前端调用,因此就需要模拟前端请求后端接口,后端返回数据.一般开发中都是返回json数据格式来完成前后端的交互. ...
- Linux下的磁盘分区,和创建文件系统(理论及实战)
首先我们先了解一下磁盘的原理 磁盘的数据结构有: 扇区:盘片被分为多个扇形区域,每一个扇区存放512个字节的数据 磁道:同一个盘片不同半径的同心圆 柱面:不同盘片相同半径构成的圆柱面 公式: 磁盘存储 ...
- ArcGIS 切片与矢量图图层顺序问题
在项目中有个需求:根据图层索引添加图层 看到这个需求一下子想到 map.addLayer(layer,index?) 接口 但是问题出现了,我切片图加载顺序在矢量图之后就不行! map = new M ...
- 基于Galera Cluster多主结构的Mysql高可用集群
Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...
- 【2018寒假集训Day 8】【并查集】并查集模板
Luogu并查集模板题 #include<cstdio> using namespace std; int z,x,y,n,m,father[10001]; int getfather(i ...
- HashMap面试题,看这一篇就够了!
目录 序言 一.JDK7中的HashMap底层实现 1.1 基础知识 1.2 put()方法 1.2.1 特殊key值处理 1.2.2 扩容 1.2.3 如何计算bucket下标? 1.2.4 在目标 ...
- 2场 J -Subarray
题意: 长度为1e91e9的(1,−1)(1,−1)序列,下标从00到1e9−11e9−1,已知有nn个区间为11,其他为−1−1, 问存在多少个区间的和>1>1(保证∑1≤i≤nr[i] ...
- 前端vue如何下载或者导出word文件和excel文件
前端用vue怎么接收并导出文件 window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一 ...
- 【数据结构】之串(C语言描述)
串(字符串)是编程中最常用的结构,但 C语言 中没有“字符串”这种变量,只能通过字符数组的形式表示字符串. C语言 为我们提供了一个 string.h 的头文件,通过这个头文件,我们可以实现对字符串的 ...