【问题标题】:How can I map multiple enums into the same column in java spring?java - 如何在java spring中将多个枚举映射到同一列?
【发布时间】:2021-07-05 09:51:30
【问题描述】:

我在模型对象中有一个字段,它采用这样的枚举:

@Enumerated(...)
private UniveritySubject subject; //Of course not working like this...

为了更好的结构和更好的概述,我想将我的主题分成两个枚举:一个枚举代表冬季,一个枚举代表夏季主题,如下所示:

public class Subject {

    public enum Summer {
        ...
        MATH;
    }

    public enum Winter {
        ...
        PHYSICS;
    }
}

如何实现这些枚举到模型列subject 的映射?遗憾的是不可能继承枚举,所以我不能拥有“超类枚举”。我考虑过使用一个布尔值 isInWinter 的枚举,但请注意我有很多主题,我认为概括起来并不好。 有没有其他解决办法?

【问题讨论】:

  • 这是一个 JPA(可能是 Hibernate)问题。它几乎与 Spring 无关。
  • 好的,谢谢。我删除了错误的标签。
  • 我看了看,但老实说,我不知道为什么他们甚至以他们的方式使用这些枚举......这与我的示例有何对应?

标签: java database jpa enums


【解决方案1】:

为了使这一点正常化,我会改变设计。 UniversitySubject 应该是它自己的实体,例如(例如):

@Entity
public class UniversitySubject {
    @Enumerated(EnumType.STRING)
    private Season season;
    @Enumerated(EnumType.STRING)
    private Subject subject;
}

Season 在哪里:

enum Season { SPRING, SUMMER, AUTUMN, WINTER }

Subject

enum Subject { MATH, PHYSICS, BIOLOGY }

然后在使用它的类中会像

@ManyToOne
private UniversitySubject subject;

另外,为了澄清一点,也许UniversitySubject 可以命名为TermSubject 或类似名称?

当然可以使用 JPA 注释,例如将所有这些东西连接成一个字符串并解析回来,但设计中的小改动应该使这些“黑客”变得不必要。

【讨论】:

  • 好吧,有点意思……如果只有两个季节,现在会有更聪明的方法来模拟季节吗?我应该使用布尔值吗?
  • @F_Schmidt 你可以有类似boolean isWinter 的东西,但是如果之后出现其他季节,延长的过程有点复杂。
猜你喜欢
  • 1970-01-01
  • 2019-08-01
  • 2018-04-11
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多