📜  Hibernate – 映射类型(1)

📅  最后修改于: 2023-12-03 15:01:08.254000             🧑  作者: Mango

Hibernate – 映射类型

在Hibernate中,有几种常见的数据类型需要进行映射。这些数据类型包括基本类型(如字符串和整数),枚举和日期对象。在Hibernate中,我们使用映射类型(Mapping Types)来定义这些数据类型的映射关系。

映射类型分类

Hibernate的映射类型可以分为以下几类:

  1. 基本类型
  2. 日期类型
  3. 枚举类型
  4. 集合类型
  5. 用户自定义类型
1. 基本类型

Hibernate支持标准的Java基本类型,如字符串、整数、浮点数和布尔类型。这些基本类型都有对应的映射类型。例如,Java中的字符串类型可以使用Hibernate中的StringType进行映射,整数类型可以使用IntegerType进行映射,依此类推。

示例
@Entity
@Table(name = "employee")
public class Employee {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;
  private Integer salary;
  // getters and setters
}

在上面的示例中,基本数据类型String和Integer都可以直接映射到Hibernate的StringType和IntegerType中。

2. 日期类型

Hibernate可以通过映射类型将Java的日期类型映射为数据库中的日期时间类型。Hibernate支持以下日期类型的映射:

  1. java.util.Date
  2. java.sql.Date
  3. java.sql.Timestamp
  4. java.time.LocalDate
  5. java.time.LocalDateTime
  6. java.time.LocalTime
  7. java.time.OffsetDateTime
示例
@Entity
@Table(name = "invoice")
public class Invoice {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private java.sql.Date invoiceDate;
  // getters and setters
}

在上面的示例中,我们将Java的Date类型映射到了数据库中的Date类型。Hibernate会自动完成类型转换。

3. 枚举类型

Hibernate可以将Java中的枚举类型映射为数据库中的整数类型。这意味着每个枚举值都将映射为一个整数值,并存储在数据库中。Hibernate支持Java 5及以上版本的枚举类型作为映射类型。

示例
@Entity
@Table(name = "product")
public class Product {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @Enumerated(EnumType.STRING)
  private ProductType type;
  // getters and setters
}

在上面的示例中,Product实体类有一个枚举属性type,它被映射到了数据库中的字符串类型。EnumType.STRING表示将枚举值映射为字符串类型。

4. 集合类型

Hibernate也支持映射Java中的集合类型。常见的集合类型包括List、Set和Map。Hibernate支持以下集合类型的映射:

  1. java.util.Collection
  2. java.util.List
  3. java.util.Set
  4. java.util.Map
示例
@Entity
@Table(name = "order")
public class Order {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @ElementCollection
  private List<String> items;
  // getters and setters
}

在上面的示例中,Order实体类有一个items属性,它被映射为一个字符串类型的List。

5. 用户自定义类型

如果Hibernate默认提供的映射类型无法满足需求,我们也可以自定义映射类型。我们只需要实现接口org.hibernate.usertype.UserType,并在映射文件中指定它即可。

示例
public class PhoneNumberType implements UserType {
  // implementation details go here
}

@Entity
@Table(name = "customer")
public class Customer {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @Type(type = "com.example.PhoneNumberType")
  private PhoneNumber phone;
  // getters and setters
}

在上面的示例中,我们定义了一个自定义映射类型PhoneNumberType,并将它指定为Customer实体类中的phone属性的映射类型。

以上介绍了Hibernate中的映射类型,它们为我们提供了灵活的方式来映射Java类型和数据库类型。