2.1 注解@Entity、@Table

如果你想将你的类映射到数据库中的表,那么为此你需要向它添加多达 3 个注释。

首先,你需要给类添加一个注解@Entity。这个类前面的注解会告诉Hibernate,这不仅仅是一个类,而是一个特殊的类,它的对象需要存储在数据库中。

例子:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

这足以让 Hibernate 以特殊方式处理此类的对象。

第二个注解是@Table. 在它的帮助下,您可以设置数据库中与此类关联的表的名称。例子:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

如果类名和表名相同,则注解@Table可以省略。

此外,如果您的应用程序同时使用来自多个模式的表,那么您需要指定该表所在的特定模式:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

是的,一切都像看起来那么简单。

2.2 @Column注解

第二件重要的事情是表列到类字段的映射。在最简单的版本中,Hibernate 将简单地将实体类的字段映射到所需表的列。

如果你想控制映射的所有细微差别,你可以使用注解@Column。例子:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

注释@Column有各种参数,下面我们将考虑其中最流行的参数:

# 属性名称 属性类型 描述
1个 姓名 细绳 设置类字段的表列名称
2个 独特的 布尔值 所有字段值必须唯一
3个 可为空 布尔值 该字段可以为空
4个 长度 整数 最大长度(对于字符串)

让我们向用户实体类的字段添加一些约束:

  • 用户名必须唯一且不超过 100 个字符
  • 级别可以为空
  • createdDate 不能为空

那么我们的注解就变成了:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

您可以创建一个User类型的对象,甚至可以为其分配所有字段,但是,当您尝试将其保存到数据库时,Hibernate 将执行检查,如果违反任何限制,将抛出异常。

2.3 @Id 注解

还有一个更重要的注解是@Id. 它可用于设置表的主键。

您只需要为所需的字段指定此注释 - Hibernate 将自行完成所有操作:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

如果你希望 Hibernate在将对象添加到数据库时独立生成对象的ID@GeneratedValue ,那么你需要再添加一个注解 - . 那么我们的示例将如下所示:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

我们在这里省略了id@Column字段的注解,因为它不携带有价值的信息——表中的字段名和列名是相同的,多亏了其余的注解,Hibernate 已经知道我们在谈论一个表柱子。