Hibernate _ JPA2 持久化注解教程_HowToDoInJava 中文系列教程

个Hibernate 注解:Hibernate架构设计与注解应用案例(必须收藏)

Hibernate 是 Java 持久化领域的核心框架,通过对象关系映射(ORM)技术,将 Java 对象与关系型数据库中的表相互映射。这种映射使得开发者能够使用面向对象的方法来处理数据,而不必编写复杂的 SQL 语句。Hibernate 提供了一系列注解,如 @Entity 用于标识实体类, @Table 用于指定实体与数据库表的映射, @Id 用于标记实体的主键字段,以及 @Column 用于定义实体属性与数据库表列的映射关系。 此外, @ManyToOne@OneToMany@ManyToMany 注解用于表达实体之间的关系,而 @JoinColumn 用于指定关系映射中的外键列。高级特性如 @Cache 注解用于配置

肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注

欢迎 点赞,关注,评论。

关注公号Solomon肖哥弹架构获取更多精彩内容

历史热点文章

  • 个验证注解,通过业务案例让你精通Java数据校验(收藏篇)
  • Java 8函数式编程全攻略:种函数式业务代码实战案例解析(收藏版)
  • 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)
  • 个Spring bean 全部注解:真实业务使用案例说明(必须收藏)
  • MySQL索引完全手册:真实业务图文讲解种索引运用技巧(必须收藏)
  • 一个项目代码讲清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO

hibernate 架构图

在这个图表中:

  • ORM 组包含了 Hibernate 框架的核心组件,如配置文件、数据源、事务管理和缓存。
  • Data Access 组描述了 Hibernate 会话、事务和持久化上下文,这些是进行数据访问和操作的主要接口。
  • Mapping 组展示了持久化类、实体、主键、属性、关联和表之间的映射关系。
  • Strategy 组包含了 Hibernate 的事务策略和缓存策略,这些定义了 Hibernate 的行为和性能优化。

1. 实体和表映射注解

@Entity

  • 注解作用介绍

用于标记一个类作为JPA实体。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
@Entity
public class User {
    // 实体类字段和方法
}
  • 注解使用效果: 使用 @Entity后,MyBatis Plus和Hibernate会将该类识别为一个实体,可以进行数据库操作。

@Table

  • 注解作用介绍

用于指定实体与数据库表的映射。

  • 注解属性介绍name: 指定实体对应的数据库表名。
  • 注解业务案例
@Entity
@Table(name = &#;user_table&#;)
public class User {
    // 实体类字段和方法
}
  • 注解使用效果: 使用 @Table后,MyBatis Plus和Hibernate会将该实体映射到指定的数据库表。

2. 主键和生成策略注解

@Id

  • 注解作用介绍

用于标记实体的主键字段。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public class User {
    @Id
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Id后,MyBatis Plus和Hibernate会将该字段识别为实体的主键。

@GeneratedValue

  • 注解作用介绍

用于指定主键的生成策略。

  • 注解属性介绍strategy: 指定生成策略,如 GenerationType.AUTO
  • 注解业务案例
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @GeneratedValue后,MyBatis Plus和Hibernate会根据指定的策略生成主键值。

3. 属性和列映射注解

@Column

  • 注解作用介绍

用于指定实体属性与数据库表列的映射。

  • 注解属性介绍name: 指定数据库表的列名。
  • 注解业务案例
public class User {
    private Long id;
    @Column(name = &#;user_name&#;)
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Column后,MyBatis Plus和Hibernate会将该字段映射到指定的数据库表列。

@Basic

  • 注解作用介绍

用于映射基本数据类型的属性。

  • 注解属性介绍fetch: 指定加载策略,如 FetchType.LAZY
  • 注解业务案例
public class User {
    private Long id;
    @Basic(fetch = FetchType.LAZY)
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Basic后,MyBatis Plus和Hibernate会根据指定的加载策略加载该字段。

@Enumerated

  • 注解作用介绍

用于映射枚举类型的属性。

  • 注解属性介绍value: 指定枚举值的类型。
  • 注解业务案例
public enum Gender {
    MALE, FEMALE
}

public class User {
    private Long id;
    @Enumerated(EnumType.STRING)
    private Gender gender;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Enumerated后,MyBatis Plus和Hibernate会将枚举值映射为指定的类型。

@Transient

  • 注解作用介绍

用于标记非持久化字段。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public class User {
    private Long id;
    @Transient
    private String temporaryData;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Transient后,MyBatis Plus和Hibernate不会将该字段持久化到数据库。

@Embedded

  • 注解作用介绍

用于将一个类嵌入到另一个实体中。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
public class Address {
    private String street;
    private String city;
}

public class User {
    private Long id;
    @Embedded
    private Address address;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Embedded后,MyBatis Plus和Hibernate会将嵌入的类作为实体的一部分进行持久化。

4. 关联和关系注解

@ManyToOne

  • 注解作用介绍

用于标记实体与另一个实体的多对一关系。

  • 注解属性介绍targetEntity: 指定关联实体的类型。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @ManyToOne
    private Department department;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @ManyToOne后,MyBatis Plus和Hibernate会将该字段识别为多对一关系,并进行相应的数据库操作。

@OneToMany

  • 注解作用介绍

用于标记实体与另一个实体的一对多关系。

  • 注解属性介绍mappedBy: 指定对方实体中用于映射当前实体的属性名。
  • 注解业务案例
public class Department {
    @Id
    private Long id;
    @OneToMany(mappedBy = &#;department&#;)
    private List<User> users;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @OneToMany后,MyBatis Plus和Hibernate会将该字段识别为一对多关系,并进行相应的数据库操作。

@ManyToOne

  • 注解作用介绍

用于标记实体与另一个实体的多对一关系。

  • 注解属性介绍targetEntity: 指定关联实体的类型。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @ManyToOne
    private Department department;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @ManyToOne后,MyBatis Plus和Hibernate会将该字段识别为多对一关系,并进行相应的数据库操作。

@ManyToMany

  • 注解作用介绍

用于标记实体与另一个实体的多对多关系。

  • 注解属性介绍targetEntity: 指定关联实体的类型。mappedBy: 指定对方实体中用于映射当前实体的属性名。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @ManyToMany
    private List<Role> roles;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @ManyToMany后,MyBatis Plus和Hibernate会将该字段识别为多对多关系,并进行相应的数据库操作。

@JoinColumn

  • 注解作用介绍

用于指定关系映射中的外键列。

  • 注解属性介绍name: 指定外键列的名称。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @ManyToOne
    @JoinColumn(name = &#;department_id&#;)
    private Department department;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @JoinColumn后,MyBatis Plus和Hibernate会将该字段映射到指定的外键列。

5. 高级映射注解

@AttributeOverride

  • 注解作用介绍

用于覆盖继承实体中的属性映射。

  • 注解属性介绍name: 指定要覆盖的属性名称。column: 指定新的列映射。
  • 注解业务案例
public class BaseEntity {
    private Long id;
}

public class User extends BaseEntity {
    @AttributeOverride(name = &#;id&#;, column = @Column(name = &#;user_id&#;))
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @AttributeOverride后,MyBatis Plus和Hibernate会使用指定的列映射覆盖继承实体中的属性。

@AssociationOverride

  • 注解作用介绍

用于覆盖继承实体中的关联属性映射。

  • 注解属性介绍name: 指定要覆盖的关联属性名称。joinColumns: 指定新的关联列映射。
  • 注解业务案例
public class BaseEntity {
    private Department department;
}

public class User extends BaseEntity {
    @AssociationOverride(name = &#;department&#;, joinColumns = @JoinColumn(name = &#;user_department_id&#;))
    private Department department;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @AssociationOverride后,MyBatis Plus和Hibernate会使用指定的关联列映射覆盖继承实体中的关联属性。

@SecondaryTable

  • 注解作用介绍

用于映射实体到多个表。

  • 注解属性介绍name: 指定第二个表的名称。
  • 注解业务案例
@Entity
@SecondaryTable(name = &#;user_details&#;, pkJoinColumns = @PrimaryKeyJoinColumn(name = &#;user_id&#;))
public class User {
    @Id
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @SecondaryTable后,MyBatis Plus和Hibernate会将该实体映射到多个表。

@PrimaryKeyJoinColumn

  • 注解作用介绍

用于映射复合主键中的外键。

  • 注解属性介绍name: 指定外键列的名称。
  • 注解业务案例
@Entity
@Table(name = &#;order_line&#;)
@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name = &#;order_id&#;, referencedColumnName = &#;id&#;),
    @PrimaryKeyJoinColumn(name = &#;line_id&#;, referencedColumnName = &#;lineId&#;)
})
public class OrderLine {
    // 实体类字段和方法
}
  • 注解使用效果: 使用 @PrimaryKeyJoinColumn后,MyBatis Plus和Hibernate会将该字段映射为复合主键的一部分。

6. 查询和缓存注解

@Query

  • 注解作用介绍

用于定义命名查询。

  • 注解属性介绍value: 指定查询的SQL语句。
  • 注解业务案例
public interface UserMapper {
    @Query(&#;SELECT u FROM User u WHERE u.id = #{id}&#;)
    User findUserById(@Param(&#;id&#;) Long id);
}
  • 注解使用效果: 使用 @Query后,MyBatis Plus和Hibernate会执行指定的SQL查询。

@NamedQueries

  • 注解作用介绍

用于定义多个命名查询。

  • 注解属性介绍value: 指定命名查询的数组。
  • 注解业务案例
@NamedQueries({
    @NamedQuery(name = &#;User.findAll&#;, query = &#;SELECT u FROM User u&#;),
    @NamedQuery(name = &#;User.findByName&#;, query = &#;SELECT u FROM User u WHERE u.name = #{name}&#;)
})
public class User {
    // 实体类字段和方法
}
  • 注解使用效果: 使用 @NamedQueries后,MyBatis Plus和Hibernate可以执行定义的多个命名查询。

@Cacheable

  • 注解作用介绍

用于指定实体的缓存策略。

  • 注解属性介绍value: 指定缓存的名称。
  • 注解业务案例
public interface UserMapper {
    @Cacheable(&#;userCache&#;)
    User findUserById(@Param(&#;id&#;) Long id);
}
  • 注解使用效果: 使用 @Cacheable后,MyBatis Plus和Hibernate会将查询结果缓存到指定的缓存中。

7. 动态SQL和结果集注解

@SqlResultSetMapping

  • 注解作用介绍

用于定义SQL结果集与实体类的映射。

  • 注解属性介绍name: 指定结果集映射的名称。
  • 注解业务案例
public interface UserMapper {
    @SqlResultSetMapping(name = &#;userMapping&#;)
    @Select(&#;SELECT id, name, age FROM users WHERE id = #{id}&#;)
    User findUserById(@Param(&#;id&#;) Long id);
}
  • 注解使用效果: 使用 @SqlResultSetMapping后,MyBatis Plus和Hibernate会将SQL查询结果映射到指定的实体类。

@Where

  • 注解作用介绍

用于在实体类级别添加条件约束。

  • 注解属性介绍clause: 指定条件表达式。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @Where(clause = &#;status = &#;ACTIVE&#;&#;)
    private String status;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Where后,MyBatis Plus和Hibernate会在查询时自动应用指定的条件。

8. 继承和策略注解

@DiscriminatorColumn

  • 注解作用介绍

用于映射继承结构中的类标识符。

  • 注解属性介绍name: 指定类标识符的列名。
  • 注解业务案例
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = &#;type&#;)
public class BaseEntity {
    @Id
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @DiscriminatorColumn后,MyBatis Plus和Hibernate会在单表继承结构中使用指定的列作为类标识符。

@DiscriminatorValue

  • 注解作用介绍

用于指定实体在继承结构中的值。

  • 注解属性介绍value: 指定实体的值。
  • 注解业务案例
@Entity
@DiscriminatorValue(&#;USER&#;)
public class User extends BaseEntity {
    // 实体类字段和方法
}
  • 注解使用效果: 使用 @DiscriminatorValue后,MyBatis Plus和Hibernate会在继承结构中使用指定的值来区分实体。

9. 特殊功能注解

@Convert

  • 注解作用介绍

用于指定属性转换器。

  • 注解属性介绍converter: 指定转换器的类。
  • 注解业务案例
public class User {
    @Convert(converter = CustomDateConverter.class)
    private Date birthDate;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Convert后,MyBatis Plus和Hibernate会在读写属性时使用指定的转换器。

@Access

  • 注解作用介绍

用于指定实体属性的访问策略。

  • 注解属性介绍value: 指定访问策略,如 AccessType.FIELD
  • 注解业务案例
public class User {
    @Id
    @Access(AccessType.FIELD)
    private Long id;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Access后,MyBatis Plus和Hibernate会根据指定的访问策略访问实体属性。

@BatchSize

  • 注解作用介绍

用于指定批量操作的批处理大小。

  • 注解属性介绍size: 指定批处理的大小。
  • 注解业务案例
public interface UserMapper {
    @BatchSize(size = )
    int insertBatchSelective(List<User> users);
}
  • 注解使用效果: 使用 @BatchSize后,MyBatis Plus和Hibernate会在执行批量操作时使用指定的批处理大小。

. Hibernate特有注解

@NaturalId

  • 注解作用介绍

用于指定实体的自然标识符。

  • 注解属性介绍mutable: 指定标识符是否可变。
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @NaturalId
    private String email;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @NaturalId后,Hibernate会将该字段识别为自然标识符,并提供优化的加载性能。

@Immutable

  • 注解作用介绍

用于标记实体为不可变。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
@Entity
@Immutable
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Immutable后,Hibernate会将该实体识别为不可变,优化性能。

@DynamicInsert

  • 注解作用介绍

用于动态生成INSERT语句。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
@Entity
@DynamicInsert
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @DynamicInsert后,Hibernate会动态生成INSERT语句,减少不必要的字段更新。

@DynamicUpdate

  • 注解作用介绍

用于动态生成UPDATE语句。

  • 注解属性介绍

无特定属性。

  • 注解业务案例
@Entity
@DynamicUpdate
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @DynamicUpdate后,Hibernate会动态生成UPDATE语句,减少不必要的字段更新。

@SelectBefore

  • 注解作用介绍

用于在更新或删除操作之前执行自定义的SQL查询。

  • 注解属性介绍statement: 指定自定义的SQL查询语句。
  • 注解业务案例
@Entity
@SelectBefore(statement = &#;SELECT * FROM users WHERE id = #{id}&#;)
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @SelectBefore后,Hibernate会在更新或删除操作之前执行指定的SQL查询。

@FilterDef

  • 注解作用介绍

用于定义动态过滤条件。

  • 注解属性介绍name: 指定过滤器的名称。
  • 注解业务案例
@FilterDef(name = &#;activeUsers&#;, defaultOverride = @FilterParam(name = &#;status&#;, value = &#;active&#;))
public class User {
    @Id
    private Long id;
    private String name;
    private String status;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @FilterDef后,Hibernate会定义动态过滤条件,可以在查询时使用。

@Filter

  • 注解作用介绍

用于在实体类上应用动态过滤条件。

  • 注解属性介绍name: 指定过滤器的名称。
  • 注解业务案例
@Entity
@Filter(name = &#;activeUsers&#;)
public class User {
    @Id
    private Long id;
    private String name;
    private String status;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Filter后,Hibernate会在查询时应用指定的动态过滤条件。

@FilterJoinTable

  • 注解作用介绍

用于定义动态过滤条件的关联表。

  • 注解属性介绍name: 指定关联表的名称。
  • 注解业务案例
@Entity
@FilterJoinTable(name = &#;user_roles&#;, joinColumns = @JoinColumn(name = &#;user_id&#;))
public class User {
    @Id
    private Long id;
    private String name;
    private String status;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @FilterJoinTable后,Hibernate会在查询时应用指定的关联表动态过滤条件。

@LazyCollection

  • 注解作用介绍

用于指定集合的懒加载策略。

  • 注解属性介绍value: 指定懒加载的类型,如 LazyCollectionOption.TRUE
  • 注解业务案例
public class User {
    @Id
    private Long id;
    @LazyCollection(value = LazyCollectionOption.EXTRA)
    private Set<Role> roles;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @LazyCollection后,Hibernate会根据指定的策略懒加载集合。

@Synchronize

  • 注解作用介绍

用于在分布式环境中同步数据。

  • 注解属性介绍value: 指定同步的实体类。
  • 注解业务案例
@Entity
@Synchronize(value = &#;users&#;)
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @Synchronize后,Hibernate会在分布式环境中同步指定的实体数据。

@TypeDef

  • 注解作用介绍

用于定义自定义的类型。

  • 注解属性介绍typeClass: 指定自定义类型的类。
  • 注解业务案例
@Entity
@TypeDef(typeClass = CustomType.class)
public class User {
    @Id
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @TypeDef后,Hibernate会使用指定的自定义类型进行数据持久化。

@GenericGenerator

  • 注解作用介绍

用于指定自定义的生成策略。

  • 注解属性介绍name: 指定生成器的名称。strategy: 指定生成策略的类。
  • 注解业务案例
@Entity
@GenericGenerator(name = &#;customGenerator&#;, strategy = &#;com.example.CustomGenerator&#;)
public class User {
    @Id
    @GeneratedValue(generator = &#;customGenerator&#;)
    private Long id;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @GenericGenerator后,Hibernate会使用指定的自定义生成策略生成主键值。

@CreationTimestamp

  • 注解作用介绍

用于自动设置创建时间戳。

  • 注解属性介绍column: 指定存储时间戳的列名。
  • 注解业务案例
@Entity
public class User {
    @Id
    private Long id;
    @CreationTimestamp
    private LocalDateTime created;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @CreationTimestamp后,Hibernate会在实体创建时自动设置指定列的创建时间戳。

@UpdateTimestamp

  • 注解作用介绍

用于自动设置更新时间戳。

  • 注解属性介绍column: 指定存储时间戳的列名。
  • 注解业务案例
@Entity
public class User {
    @Id
    private Long id;
    @UpdateTimestamp
    private LocalDateTime updated;
    private String name;
    // 其他字段和方法
}
  • 注解使用效果: 使用 @UpdateTimestamp后,Hibernate会在实体更新时自动设置指定列的更新时间戳。

. Hibernate综合性注解使用案例

表结构

首先,我们定义数据库中的表结构:

CREATE TABLE authors (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR) NOT NULL,
    bio TEXT
);

CREATE TABLE books (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR) NOT NULL,
    isbn VARCHAR(),
    publication_date DATE,
    price DECIMAL(, 2),
    author_id BIGINT,
    FOREIGN KEY (author_id) REFERENCES authors(id)
);

业务案例说明

在这个案例中, Author 实体代表书籍的作者, Book 实体代表书籍。 AuthorBook 之间存在一对多关系,即一个作者可以有多本书,但每本书只能有一个作者。

  • 当创建一个新的作者时, @CreationTimestamp 注解会自动设置其创建时间。
  • 当书籍信息更新时, @UpdateTimestamp 注解会自动更新其最后修改时间。
  • 书籍的价格使用 @Type 注解来确保在数据库中正确存储和检索。

实体定义

接下来,我们定义Java实体和对应的Hibernate注解。

Author 实体

import javax.persistence.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = &#;authors&#;)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Author {

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

    @Column(name = &#;name&#;, nullable = false)
    private String name;

    @Column(name = &#;bio&#;)
    private String bio;

    @OneToMany(mappedBy = &#;author&#;)
    private Set<Book> books;

    // Getters and setters
}

Book 实体

import javax.persistence.*;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

@Entity
@Table(name = &#;books&#;)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Book {

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

    @Column(name = &#;title&#;, nullable = false)
    private String title;

    @Column(name = &#;isbn&#;, unique = true)
    private String isbn;

    @Type(type = &#;org.hibernate.type.DateType&#;)
    @Column(name = &#;publication_date&#;)
    @CreationTimestamp
    private Date publicationDate;

    @Column(name = &#;price&#;, precision = , scale = 2)
    private BigDecimal price;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = &#;author_id&#;, nullable = false)
    private Author author;

    // Getters and setters
}

注解说明

  • @Entity: 标记类作为JPA实体。
  • @Table: 指定实体对应的数据库表名。
  • @Id: 标记实体的主键字段。
  • @GeneratedValue: 指定主键的生成策略。
  • @Column: 指定实体属性与数据库表列的映射。
  • @OneToMany: 标记一对多关系。
  • @ManyToOne: 标记多对一关系。
  • @JoinColumn: 指定关系映射中的外键列。
  • @Cache: 指定实体的缓存策略。
  • @CreationTimestamp: 自动设置实体的创建时间戳。
  • @UpdateTimestamp: 自动设置实体的更新时间戳。
  • @Type: 指定自定义的Hibernate类型。
原文链接:,转发请注明来源!