SSH基础----【超级干货】Hibernate常用注解用法汇总

由于网上对Hibernate注解的用法和定义几乎没有,本人在此将常用的常见的一些Hibernate注解进行汇总,本篇不会对所有注解进行详细讲解,比较适用于那些刚接触Hibernate,并且有现成的基于Hibernate的项目的同学来进行字典式查找,帮助同学们快速了解自己的项目。


JPA标准的注解:

@Entity 标注该类是一个实体类,关于实体类的概念,我会在另外一篇文章中进行详细解读,初学者只要认为表示一个数据库的一个表就可以

@Table 常和@Entity一起用,表示数据库中表的名字

@Id 用于标注成员变量,表示该变量是数据库的主键

@GeneratedValue 用于启动该主键的自增策略

@NotNull 用于标注该字段是非空(应用控制,数据库仍然可以可空)

@Basic 如果不希望依赖属性映射默认设置,那么可以将@Basic标注到特定的成员变量

@Column 比@Basic更加常用,也是标注字段的各种属性

@Access 有点类似延迟加载,可以设置该属性在调用get set时候才会查询或提交

@Embeddable 用于标注该类是一个值类,并不是实体类

@Embedded 和Embeddable相对,@Embeddable是标注在类上的,而@Embedded则是标注在属性上的

@AttributeOverride 属性的对应数据库的字段名字重写,有点类似@Column的name属性

@Lob 将JAVA类型映射到数据库的BLOB类型上

@Converter 用于标注到类上,该类必须实现AttributeConverter接口,用于自定义类型转换

@Convert 与@Converter搭配使用,用于启用自定义的类型转换器

@MappedSupperclass 用于标注基类,使基类的属性也被@Entity检测到

@Inheritance 用于实体类的基类,指明各个有兄弟关系的实体类的在数据库中共用方式

@DiscriminatorColumn 用于实体类的基类,如果多个实体类共用一个表的时候,就要用这个标注指定区分实体类的字段是哪一个

@DiscriminatorValue 用于实体类,与@DiscriminatorColumn共用,表示该字段如果是@DiscirminatorValue指定的值,则该记录表示该实体类

@DiscriminatorFormula 用于实体类,如果多个实体类共用一个表,并且区分实体类型的方式较为复杂,就需要用这个标注注明区分各个实体的方法

@ManyToOne 表示实体之间是多对一关系

@OneToMany 表示实体之间是一对多关系

@ManyToMany 表示实体之间是多对多关系

@OneToOne 表示实体之间是一对一的关系

@ElementCollection 当一个实体类的属性中需要用到一个数组表示一段集合时,并且这个集合并不是一个实体类时,需要用到这个注解

@CollectionTable 与@ElementCollection共用,表示该集合所在的表的表名字及其他信息

@OrderColumn @ElementCollection的集合自动按照顺序排列

@MapKeyColumn 如果@CollectionTable中的字段比需要的要多,就用@MapKeyColumn拿出只需要的字段

@JoinColumn 与@ManyToOne共用,标注关联的外键

@OnDelete 标注在@OneToMany旁边,表示当集合中被移除时,同时也删除数据库中的记录

@PrimaryKeyJoinColumn 共享主键策略,用于@OneToOne旁边

@UniqueConstraint 属于@Table中的属性,表示某个字段必须满足唯一性

@Index 属于@Table中的属性,为实体类创建索引

@EmbeddedId 用于标注一个组合主键,与@Embeddable共同使用,其中@Embeddable标注的类必须实现Serializable

@Version 用于表示该字段为乐观锁

@Temporal 表示该属性在数据库中的字段的类型,常用于Date和时间戳的转换




Hibernate提供的注解

@DynamicInsert 标注在实体类,在应用启动时候,禁用INSERT语句生成,加快启动时间

@DynamicUpdate 标注在实体类,在应用启动时候,禁用UPDATE语句生成,加快启动时间

@Immutable 标注在实体类,让实体不可变

@Subselect 标注到实体类,将子查询映射到实体类

@Formula 用于标注实体的派生属性,当调用指定属性的get时候,就调用该标注所用的sql语句

@ColumnTransformer 用于单位自动转换,例如程序使用时用的单位是毫秒,而数据库保存的数据单位为秒时,就可用这个注解自动转换

@ColumnDefault 设置属性默认值

@CreationTimestamp 自动注入实体类的创建时间

@UpdateTimestamp 自动注入实体类被UPDATE的时间

@Enumerated 用于标注该属性为一个枚举属性

@Type 重写Hibernate中默认类型转换

@SortNatural 指定由@ElementCollection标注的集合使用默认排序方法

@SortComparator 指定由@ElementCollection标注的集合的排序方法

@OrderBy 指定由@ElementCollection标注的集合的排序方法

@Parent 指定该实体类的拥有者的引用

@Check Hibernate的字段约束机制,用于表示字段间一定要满足某种关系

@LazyCollection 标明是延迟加载,只有在调用get方法时,才会查询数据库

@Proxy 设置代理的属性,通常用于禁用代理,也就是调用em.getReference的时候,返回的就是实体对象

@BatchSize 用于批量查询的时候,提前获取@BatchSize标注的数量,减少查询次数

@Fetch 用于标注属性,通常与@OneToMany和@ManyToOne一起用,表示使用特定方式进行级联查询

@Cascade  用于设置属性的级联等级

@PostPersist 类似Spring的面向切面机制,标注一个方法,这个方法在实体被persist的时候调用,常用于记录数据库日志等信息。类似的还有@PostLoad,@PrePersist,@PreUpdate,@PostUpdate, @PreRemove,@PostRemove

@Audited 启用审计日志,启用之后,可以用AuditReader查看该实体类的修改记录

@Filter 按照该注解的condition属性,自动过滤记录,如果该记录需要通过过滤器,必须最后的结果为true








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值