Hibernate注解

一、类级别注解

@Entity      该注解将一个类声明为一个实体Bean,必须有

name:可选,对应数据库中的一个表,若表名与实体类名相同可以省略
schema:可选,对应数据库的库名,可省略

@Table      只能标注在实体class定义处,用来指定实体类和数据库表的对应关系,通常和@Entity配合使用,可省略

name:可选,指定表的名称;默认实体名称和表名一致,不一致是使用该属性指定表名
catalog:可选,指定Catalog名称(一般写数据库名称)
schema:可选,作用和catalog类似

@Entity
@Table(name = "IDC_ALARM_BORD", schema = "CATH_THINKOPS")
public class AlarmBord { }
二、属性级别注解

@Id      定义映射到数据库表的主键属性,一个实体类只能有一个属性被定义为主键,必须有
@GeneratedValue      定义主键生成策略,可省略

strategy:定义主键生成策略,取值有:
GenerationType.AUTO(默认,根据底层数据库自动选择)
GenerationType.INDENTITY(根据数据库的Identity字段生成,支持DB2、MySQL等)
GenerationType.SEQUENCE(使用Sequence来决定主键的取值,适合Oracle、DB2等)
GenerationType.TABLE(使用指定表来决定主键取值,结合@TableGenerator使用)

generator:定义主键生成器的名称,如:hibernate可以指定 uuid 等主键生成方式

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@GenericGenerator      是 Hibernate 所提供的自定义主键生成策略生成器,对 JPA 策略的一种拓展补充

它要配合 @GeneratedValue 一起使用,并且 @GeneratedValue 注解中的 generator 属性要与 @GenericGenerator 注解中 name 属性一致,strategy 属性表示 hibernate 的主键生成策略

name:该值要和 @GeneratedValue 注解中 generator 属性值一致
strategy:主键生成策略,取值有:uuid、hilo、assigned、identity、select、sequence、seqhilo、increment、foreign、guid、uuid.hex、sequence-identity 和 native

@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "increment")
private Long id;

@Column      将属性映射到列,描述数据库表中该字段的详细信息

name:可选,表示数据库表中该字段的名称,默认情形属性名称一致
nullable:可选,表示该字段是否允许为null,默认为true
unique:可选,表示该字段是否是唯一标识,默认为false
length:可选,表示该字段的大小,仅对String类型的字段有效,默认值255
insertable:可选,表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true
updateable:可选,表示在ORM 框架执行更新操作时,该字段是否应该出现在UPDATE 语句中,默认为true
columnDefinition:可选,表示该字段在数据库中的实际类型(VARCHAR、DATE、TEXT、BLOB)

@Column(name = "ALARM_ID")
private String alarmId;

@Transient      表示该属性并非一个到数据库表的字段的映射

@Transient // 定义该属性不映射到数据库表中(数据库表中没有这个字段)
private String hostName;

@Temporal      用于定义映射到数据库的时间精度,只对 Date 类型数据有效

TemporalType:时间精度,取值有:DATE(日期)、TIME(时间)、TIMESTAMP(两者兼具)

@Temporal(TemporalType = DATE)
@Column
private Date createTime;

@JoinColumn      定义该字段是关联字段

name:该字段的名称,由于@JoinColumn描述的是一个关联字段,如ManyToOne, 则默认的名称由其关联的实体决定

@OneToOne(cascade = CascadeType.ALL, optional=true)
@JoinColumn(name = "hostId") // 指向另一张表的属性
private Long hostId;

@OneToOne、@OneToMany、@ManyToOne、@ManyToMany      关联映射

cascade:设置级联方式,取值有:
CascadeType.ALL(全部)
CascadeType.PERSIST(保存)
CascadeType.REMOVE(删除)
CascadeType.MERGE(修改)
CascadeType.REFRESH(刷新)

fetch:配置加载方式,取值有:Fetch.EAGER(及时加载,多对一默认是Fetch.EAGER)、Fetch.LAZY(延迟加载)
targetEntity:配置集合属性类型

@ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, optional = true)

@Formula      作用是用一个查询语句动态的生成一个类的属性

@Formula("(select COUNT(*) from user)") // 把SQL查询的结果赋值给该字段
private int count;
三、Hibernate中Jackson相关注解

需要引入 Jackson 相关的包

<!-- Jackson -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.5</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.5</version>
</dependency>

@JsonFormat      属性级别注解,可以方便的把Date类型直接转化为我们想要的模式

pattern:指定时间格式
timezone:指定时区

@Column
@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss", timezone = "GMT+08:00") // 指定时间的格式
private Date createTime;

@JsonIgnoreProperties      类级别注解,作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响

@Entity
@JsonIgnoreProperties // 序列化时将Java bean中的一些属性忽略掉
public class Jenkins implements Serializable {
}

@JsonIgnore      属性级别注解,作用和@JsonIgnoreProperties一样

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页