【问题标题】:Table as an enum. Is it possible?表作为枚举。是否可以?
【发布时间】:2016-04-04 08:09:02
【问题描述】:

如何将静态表(不可扩展)映射到 Java 中的枚举并将此表绑定到另一个表?

例如,我有一个简单的计算器网络应用程序(spring web MVC + hibernate),其中一个表(用户计算的结果)具有以下字段:id (PK)leftOperandoperationrightOperandresult.

我想创建一个新的静态表(我的​​意思是用于基本算术运算,例如 PLUSMINUSDIVIDEMULTIPLY),其中包含 2 个字段:id(PK)和 operation,以及将此表映射到 Java 中的枚举。

那么如何绑定这两个表(使用operation 字段)? 非常感谢一些伪代码。

请注意,我不需要为静态表创建休眠实体。只是枚举。

【问题讨论】:

  • 所以你将在 Java 中拥有一个带有 id 到 String 映射的 Enum,但你还想在数据库中保留完全相同的信息?!因此有重复。 (对我来说)你为什么要这样做是没有意义的。有人可能会同时进来更新 Java 枚举映射,然后它们不一致......

标签: java hibernate jpa enums


【解决方案1】:

与类一样,您可以像这样向枚举添加属性:

public enum MyEnum {
    PLUS(1, "something"),
    MINUS(2, "something");

    private final int id;
    private final String string;

    private MyEnum(int id, String string){
        this.id = id;
        this.string = string;
    }

    public int getId(){
        return id;
    }

    public String getString(){
        return string;
    }

}

假设 'opreration' 字段与枚举的 name 匹配,您可以执行以下操作:

MyEnum enumValue = MyEnum.valueOf(map.get("operation"));

【讨论】:

    【解决方案2】:

    我认为您不需要静态表来存储操作值。只需将operation 字段类型更改为枚举并使用@Enumerated

    enum Operation {
        PLUS, MINUS;
    }
    
    @Entity
    public class Calculation {
    
        private String leftOperand;
    
        @Enumerated(EnumType.STRING)
        private Operation operation;
    
        private String rightOperand;
    
    }
    

    【讨论】:

    • 是的,这很简单。但是有没有办法让一个单独的表映射到枚举并绑定到主表?
    • @stryker 我不认为有办法做到这一点。为枚举设置单独的静态表似乎没有任何意义。
    • 有两个原因:将表映射到枚举并将这些表相互绑定,这不是真正的 Web 应用程序。这只是为了测试,我想知道它是如何工作的。谢谢
    • 我们需要为想要在 SQL 中做所有事情的团队成员用表支持所有枚举...
    猜你喜欢
    • 2022-11-10
    • 2019-01-24
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多