feat: 数据库实体基础

This commit is contained in:
2026-06-15 16:47:36 +08:00
parent ab3ff6429c
commit 578f2987e5
2 changed files with 80 additions and 29 deletions

View File

@@ -0,0 +1,71 @@
package com.webgame.webgamebackend.entities;
import com.webgame.webgamebackend.entities.base.UUIDBaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDate;
/**
* 用户实体,与 AccountEntity 一对一关联
*/
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(name = "user")
public class UserEntity extends UUIDBaseEntity {
/**
* 关联的账号
*/
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "account_id", referencedColumnName = "id", unique = true)
private AccountEntity account;
/**
* 昵称
*/
@Column(name = "nick_name", length = 16, nullable = false)
private String nickName;
/**
* 头像
*/
@Column(name = "avatar", length = 512)
private String avatar;
/**
* 个性签名
*/
@Column(name = "signature", length = 64)
private String signature;
/**
* 年龄
*/
@Column(name = "age")
private Integer age;
/**
* 性别 1男 2女
*/
@Column(name = "sex", length = 1)
private Integer sex;
/**
* 生日
*/
@Column(name = "birthday")
private LocalDate birthday;
}

View File

@@ -1,13 +1,12 @@
package com.webgame.webgamebackend.entities.base;
import jakarta.persistence.Column;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -19,38 +18,19 @@ import java.time.LocalDateTime;
@Setter
@Accessors(chain = true) // 允许链式调用
@MappedSuperclass // 表示该类不会映射到数据库表
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity implements Serializable {
/**
* 创建时间
*/
@Column(name = "create_time")
@CreatedDate
@Column(name = "create_time", updatable = false)
protected LocalDateTime createTime;
/**
* 更新时间
*/
@LastModifiedDate
@Column(name = "update_time")
protected LocalDateTime updateTime;
@PrePersist
private void preEntityCreateTime() {
this.createTime = LocalDateTime.now();
}
@PreUpdate
private void preEntityUpdateTime() {
this.updateTime = LocalDateTime.now();
}
}
/**
* pre 插入数据库前,可以影响插入数据
* post 插入数据库后,已完成插入,无法再改变字段值
* @PrePersist在实体被持久化之前调用。
* @PreRemove在实体被删除之前调用。
* @PostPersist在实体被持久化之后调用。
* @PostRemove在实体被删除之后调用。
* @PostLoad在实体被加载到持久化上下文后调用。
* @PreUpdate在实体更新之前调用。
* @PostUpdate在实体更新之后调用。
*/