S SmartDocs
シリーズ: Java java 84 行 · 更新日 2026-04-09

Goods.java

Java/Baasid/src/main/java/com/baasid/entity/Goods.java

package com.baasid.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import jakarta.persistence.Table;

import java.time.LocalDateTime;
import java.util.UUID;

/**
 * 商品實體,對應資料表 {@code goods}。
 * <p>
 * 含建立者/最後更新者(皆關聯 {@link SystemUser}),以及由 JPA 生命週期回呼維護的時間欄位。
 */
@Entity
@Table(name = "goods")
public class Goods {

    @Id
    @GeneratedValue(strategy = GenerationType.UUID)
    @Column(name = "_id", updatable = false, nullable = false)
    private UUID id;

    @Column(name = "name", length = 128, nullable = false)
    private String name;

    /** 建立者;插入後不可改關聯(updatable = false)。 */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cr_user", nullable = false, updatable = false)
    private SystemUser crUser;

    @Column(name = "cr_datetime")
    private LocalDateTime crDatetime;

    /** 最後更新者;每次更新可變更。 */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "up_user", nullable = false)
    private SystemUser upUser;

    @Column(name = "up_datetime")
    private LocalDateTime upDatetime;

    public Goods() {}

    /** 首次 {@code persist} 時填寫建立時間與更新時間為同一時間點。 */
    @PrePersist
    public void prePersist() {
        LocalDateTime now = LocalDateTime.now();
        this.crDatetime = now;
        this.upDatetime = now;
    }

    /** 每次 {@code merge}/更新實體時刷新最後更新時間。 */
    @PreUpdate
    public void preUpdate() {
        this.upDatetime = LocalDateTime.now();
    }

    public UUID getId() { return id; }
    public void setId(UUID id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public SystemUser getCrUser() { return crUser; }
    public void setCrUser(SystemUser crUser) { this.crUser = crUser; }

    public LocalDateTime getCrDatetime() { return crDatetime; }
    public void setCrDatetime(LocalDateTime crDatetime) { this.crDatetime = crDatetime; }

    public SystemUser getUpUser() { return upUser; }
    public void setUpUser(SystemUser upUser) { this.upUser = upUser; }

    public LocalDateTime getUpDatetime() { return upDatetime; }
    public void setUpDatetime(LocalDateTime upDatetime) { this.upDatetime = upDatetime; }
}

関連記事