diff --git a/src/main/java/com/webgame/webgamebackend/entities/UserEntity.java b/src/main/java/com/webgame/webgamebackend/entities/UserEntity.java new file mode 100644 index 0000000..0a4a52b --- /dev/null +++ b/src/main/java/com/webgame/webgamebackend/entities/UserEntity.java @@ -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; +} diff --git a/src/main/java/com/webgame/webgamebackend/entities/base/BaseEntity.java b/src/main/java/com/webgame/webgamebackend/entities/base/BaseEntity.java index 6d5f2a5..7dcdc2f 100644 --- a/src/main/java/com/webgame/webgamebackend/entities/base/BaseEntity.java +++ b/src/main/java/com/webgame/webgamebackend/entities/base/BaseEntity.java @@ -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:在实体更新之后调用。 - */