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 已经知道我们在谈论一个表柱子。
GO TO FULL VERSION