我们假设我们有2个实体(用户和个人资料):
User {
ID INT NOT NULL,
STATUS CHAR(5) NOT NULL
}
Profile {
ID INT NOT NULL,
STATUS CHAR(5) NOT NULL
}
我会将我的实体映射为:
public class User {
@Id private Integer id;
private Status status;
}
public class Profile {
@Id private Integer id;
private Status status;
}
public enum Status {
ACTIVE, INACTIVE, BLOCKED, SUSPENDED, PENDING;
}
@Converter( autoApply = true )
public class StatusConverter implements AttributeConverter<Status,String> {
// Converter methods omitted for brevity
}
既然它有效,我相信到现在为止一切都还好。 某些状态在许多实体中是等效的,例如ACTIVE,但是某些状态不等于另一个实体状态。例如,用户可以具有BLOCKED状态,但我们从未拥有阻止的配置文件(但我们有一个非活动的配置文件)。
现在我有一些问题希望得到你的帮助:
User.Status
)或某个特定包(com.example.enums.UserStatusEnum
)?Status { ID INT NOT NULL, CODE CHAR(5) }
一样映射它并让应用程序管理它吗?或者甚至创建一个新列(ENTITY CHAR(5)
)来指定状态对应的实体?我不清楚我应该遵循的路径。你有其他建议吗?
请记住,可以有更多实体,每个实体具有不同的状态集。但这些状态经常不会改变,所以我真的不相信我需要在我的数据库上有一个表格。
答案 0 :(得分:0)
仅从应用程序端设计实体。然后设计一个匹配的数据库模式来保存它们 - 因此数据库完全从属于应用程序。
避免&#34;重复使用&#34;像身份一样的实体也许今天不同实体的状态一致,但明天他们不会。此外,某些实体可能只被允许拥有状态子集。你很快就陷入了混乱。并保存什么?几行和一些小桌子。不值得。
创建单独的枚举,例如UserStatus
。忽略实体之间共享某些状态值的事实。