2.4 定义聚合
2.4.1 定义实体
我们使用javax.persistence.Entity
注解来定实体类:
@Entity
public class Person {
}
一个实体类会映射数据库的一张表,我们启用了spring.jpa.hibernate.ddl-auto: update
,Spring Data会自动为我们建一个首字母小写的表person
。
我们可以通过@Table(name = "tb_person")
来定制的表名。
2.4.2 定义Id
我们使用javax.persistence.Id
注解来定义唯一标识,它会和数据库的主键映射;使用javax.persistence.GeneratedValue
注解来指定唯一标识的产生策略。
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
}
@GeneratedValue
默认使用自动选择唯一标识产生策略,在MySQL下自动使用Hibernate为我们生成的hibernate_sequence
表。我们可以使用@GeneratedValue
的generator
属性配合@SequenceGenerator
或@TableGenerator
来指定id生成器。
2.4.3 定义值
我们使用javax.persistence.Column
来定义一个属性值,它会和数据库的字段映射;当我们不使用它的时候,实体的值会自动映射为表的字段。命名规则是将驼峰式的属性名转换成下划线的字段名(如lastName
映射成last_name
)。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@Column(name = "name", length = 10)
private String name;
private Integer age;
private Boolean active = true;
}
}
2.4.4 定义单个值对象
值对象要通过javax.persistence.Embeddable
注解表明它是实体的一部分。在实体上用javax.persistence.Embedded
来组合。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Embeddable
public class Address {
private String city;
private String province;
}
Address
的属性会映射到Person
表里的字段。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@Column
private String name;
private Integer age;
@Embedded
private Address address;
<