概述
目录
- 一、实体父类
- 二、实体
- 三、字段
- 1. 标识字段(ID)
- 2. 枚举字段
- 四、关联关系
- 1. 一对一
- 2. 一对多
- 3. 多对一
- 4. 多对多
一、实体父类
@MappedSuperclass
@ToString
class BaseBean {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id
/**
* 状态
*/
@Enumerated(EnumType.STRING)
EnumRecordStatus recordStatus = EnumRecordStatus.A
LocalDateTime createTime = LocalDateTime.now()
LocalDateTime updateTime
boolean equals(o) {
if (this.is(o)) return true
if (getClass() != o.class) return false
BaseBean baseBean = (BaseBean) o
if (id != baseBean.id) return false
return true
}
int hashCode() {
return (int) (id ^ (id >>> 32))
}
}
- 在父类中统一定义一些共有属性,如创建时间,最后一次更新时间,记录状态等
- 使用 @MappedSuperclass 声明该类为实体类的父类。
- equals 方法和 hashcode 方法一定要同时重写, 否则会带来一些 “奇怪” 的错误。
二、实体
@Entity
@Table(name = "location")
public class Location extends BaseBean
{
...
}
- 通过 @Entity 标识一个实体类
- 通过 @Table 标识实体映射的表信息,如表名等。
三、字段
1. 标识字段(ID)
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "increment")
Long id
- 通过@Id 注解标识 ID 字段。
- 通过 @GeneratedValue 和 @GenericGenerator 定义 ID 生成策略。示例中采用的是自增长类型。
2. 枚举字段
@Enumerated(EnumType.STRING)
EnumRecordStatus recordStatus = EnumRecordStatus.A
- @Enumerated(EnumType.STRING) 将枚举字段映射为字符类型,否则会记录数值型的枚举序号。
四、关联关系
1. 一对一
一个标签标定一个目标
@OneToOne(targetEntity = Target.class)
Target target
2. 一对多
在建筑物实体中有一个包含所包含楼层的列表:
@OneToMany(targetEntity = Floor.class, mappedBy = "building", orphanRemoval = true)
@OrderBy("orderIndex ASC")
List<Floor> floors = new ArrayList<>()
- 使用 @OneToMany 注解
- 使用 @OrderBy 后,查询时会按指定字段排序
3. 多对一
楼层实体中定义,多个楼层对应一个建筑物实体
@ManyToOne(targetEntity = Building.class)
Building building
- 使用 @ManyToOne 注解
4. 多对多
定位实体中,一个定位可能可能属于多种区域,一个区域也有多个定位记录
@ManyToMany(targetEntity = Area.class, fetch = FetchType.LAZY)
@JoinTable(name = "location_2_area",
joinColumns = @JoinColumn(name = "location_id"),
inverseJoinColumns = @JoinColumn(name = "area_id"))
Set<Area> areas = new HashSet<>()
- 使用 @ManyToMany 注解
- 可以使用 @JoinTable 来指定关联表信息, joinColumns 表明实体主键在关联表中的列名,inverseJoinColumns 表明关联实体主键在表中映射的列名。
最后
以上就是无私巨人为你收集整理的JPA 映射一、实体父类二、实体三、字段四、关联关系的全部内容,希望文章能够帮你解决JPA 映射一、实体父类二、实体三、字段四、关联关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复