【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】常用注解的更多相关文章

  1. hibernate 常用注解

    转自:http://blog.csdn.net/numbibi/article/details/7739441 @content ejb3注解的API定义在javax.persistence.*包里面 ...

  2. 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法

    近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ...

  3. Hibernate框架注解

    1.使用Hibernate注解的步骤                1.添加jar包                            Hibernate-annotations.jar      ...

  4. Hibernate的注解方法的使用

    1.配置映射关系的xml方式 我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配.其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的 ...

  5. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  6. SG-UAP常用注解介绍

    注解基本介绍 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可 ...

  7. 1.1Spring Boot 环境配置和常用注解

    Spring Boot常用注解:@Service: 注解在类上,表示这是一个业务层bean@Controller:注解在类上,表示这是一个控制层bean@Repository: 注解在类上,表示这是一 ...

  8. SpringDataJpa实体类常用注解

    最近公司在使用SpringDataJpa时,需要创建实体类,通过实体类来创建数据库表结构,生成数据库表. 下面我们就来看下在创建实体类时一些常用的注解吧!!! 1.实体类常用注解 @Entity 标识 ...

  9. spring boot的一些常用注解

    spring boot的一些常用注解: 使用@SpringBootApplication注释: 许多Spring Boot开发人员喜欢他们的应用程序使用自动配置,组件扫描,并能够在其“应用程序类”上定 ...

随机推荐

  1. ArcGIS API For Javascript :双屏(多屏)地图联动的方法

    在遇到地图对比的应用场景下,我们需要双屏地图或者多屏地图来满足我们的业务需求. 解决思路:首先生成两份(多份)地图,然后通过监听地图缩放拖拽,用地图四至将不同的地图对象做绑定,实现多地图联动. 前端部 ...

  2. Vue学习之Vue模拟后台数据

    前后端项目的开发,需要前端和后端同时进行开发,有时后端开发人员还未完成API接口可以提供给前端调用,因此就需要模拟前端请求后端接口,后端返回数据.一般开发中都是返回json数据格式来完成前后端的交互. ...

  3. Linux下的磁盘分区,和创建文件系统(理论及实战)

    首先我们先了解一下磁盘的原理 磁盘的数据结构有: 扇区:盘片被分为多个扇形区域,每一个扇区存放512个字节的数据 磁道:同一个盘片不同半径的同心圆 柱面:不同盘片相同半径构成的圆柱面 公式: 磁盘存储 ...

  4. ArcGIS 切片与矢量图图层顺序问题

    在项目中有个需求:根据图层索引添加图层 看到这个需求一下子想到 map.addLayer(layer,index?) 接口 但是问题出现了,我切片图加载顺序在矢量图之后就不行! map = new M ...

  5. 基于Galera Cluster多主结构的Mysql高可用集群

    Galera Cluster特点 1.多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的 2.同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失 3.并发复制:从 ...

  6. 【2018寒假集训Day 8】【并查集】并查集模板

    Luogu并查集模板题 #include<cstdio> using namespace std; int z,x,y,n,m,father[10001]; int getfather(i ...

  7. HashMap面试题,看这一篇就够了!

    目录 序言 一.JDK7中的HashMap底层实现 1.1 基础知识 1.2 put()方法 1.2.1 特殊key值处理 1.2.2 扩容 1.2.3 如何计算bucket下标? 1.2.4 在目标 ...

  8. 2场 J -Subarray

    题意: 长度为1e91e9的(1,−1)(1,−1)序列,下标从00到1e9−11e9−1,已知有nn个区间为11,其他为−1−1, 问存在多少个区间的和>1>1(保证∑1≤i≤nr[i] ...

  9. 前端vue如何下载或者导出word文件和excel文件

    前端用vue怎么接收并导出文件 window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一 ...

  10. 【数据结构】之串(C语言描述)

    串(字符串)是编程中最常用的结构,但 C语言 中没有“字符串”这种变量,只能通过字符数组的形式表示字符串. C语言 为我们提供了一个 string.h 的头文件,通过这个头文件,我们可以实现对字符串的 ...