【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开发人员喜欢他们的应用程序使用自动配置,组件扫描,并能够在其“应用程序类”上定 ...
随机推荐
- 力扣(LeetCode)种花问题 个人题解
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花 ...
- 大公司 vs 小公司,你会选哪个?
找工作跟找对象差不多,在确立关系领证前,彼此要多些了解.在了解的基础上,你再确认是否真心喜欢对方,彼此身上有没有相互吸引的特质,两个人的性格是否互补.三观是否匹配.契合度越高,往后才能相互扶持.彼此成 ...
- SpringBoot源码学习系列之SpringMVC自动配置
目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...
- Vmware EXSI服务迁移无法访问故障处理
Vmware EXSI服务迁移无法访问故障处理 我们在做微服务平台服务时经常在构建IAAS时,因为硬件资源的扩容.缩减等可维护性问题需要迁移或者复制方式扩容方式来快速扩建集群节点,提高微服务运营的可靠 ...
- PowerMock学习(七)之Mock Constructor的使用
前言 我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难. 模拟场景 我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举 ...
- JAVA网络通信底层调用LINUX探究
前言:该博客花了我一个下午得心血,全部手打,路过给个赞,拒绝抄袭!!!!!!!!!!!!!!!!!!!!!!!!! 简单的SOCKET通信程序 先从一段简单的JAVA程序性开始写起,这里我们才用半双工 ...
- Tesseract处理规范的文字
- python中将xml格式转json格式
一.简介 在用python写脚本时,通常需要处理xml格式的文件或字符串.由于json格式处理的方便性, 我们可将其转为json格式进行处理. 二.步骤 1.安装工具包xmltodict 在命令行输入 ...
- 【ASP.NET Core学习】Web API
这里介绍在ASP.NET Core中使用Web API创建 RESTful 服务,本文使用VSCode + NET Core3.0 创建简单Rest API 格式化输出 JSON Patch请求 Op ...
- 测试访问apiserver状态
目录 前言 创建admin证书和私钥 分发kubeconfig文件 检查集群信息 授权kube-apiserver访问kubelet API的权限 前言 到这里,ETCD集群.kube-nginx + ...