首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何处理数据库中没有枚举字段的枚举?

如何处理数据库中没有枚举字段的枚举?
EN

Stack Overflow用户
提问于 2009-04-17 16:46:39
回答 4查看 9.8K关注 0票数 22

如何在不支持枚举的数据库中实现枚举域?(即SQLite)

这些字段需要易于使用"field = ?“进行搜索。因此,使用任何类型的数据序列化都不是一个好主意。

EN

回答 4

Stack Overflow用户

发布于 2009-04-17 17:15:03

为了限制可能的值,我将使用包含枚举项的表的外键。

如果您不想使用JOIN进行搜索,则将键设置为varchar,如果join不是问题,则将key设置为INT,除非需要在该字段上进行搜索,否则不要连接。

请注意,将枚举放入DB中会阻止对代码中的值进行编译时检查(除非在代码中复制枚举)。我发现这是一个很大的缺点。

票数 2
EN

Stack Overflow用户

发布于 2009-04-17 17:25:04

这就是我最近所做的

在我的hibernate映射POJO- I中,成员的类型保持为String,在数据库中为VARCHAR。

这里的setter方法接受一个枚举,还有另一个setter方法接受字符串--但这是私有的(或者你可以直接映射字段-如果你喜欢的话)。

现在我使用的字符串已经被全部封装了。对于应用程序的其余部分-我的域对象使用枚举。就数据库而言,我使用的是字符串。

如果我没听懂你的问题-我道歉。

票数 0
EN

Stack Overflow用户

发布于 2021-02-11 21:08:31

如果将Spring JPA2.1或更高版本与hibernate结合使用,则可以实现自己的AttributeConverter并定义枚举映射到列值的方式

代码语言:javascript
复制
@Converter(autoApply = true)
public class CategoryConverter implements AttributeConverter<Category, String> {
 
    @Override
    public String convertToDatabaseColumn(Category category) {
        if (category == null) {
            return null;
        }
        return category.getCode();
    }

    @Override
    public Category convertToEntityAttribute(String code) {
        if (code == null) {
            return null;
        }

        return Stream.of(Category.values())
          .filter(c -> c.getCode().equals(code))
          .findFirst()
          .orElseThrow(IllegalArgumentException::new);
    }
}

请参阅Persisting Enums in JPA上文章中的第四个解决方案.The代码片段也来自那里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/761211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档