V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loren20191
V2EX  ›  Java

请教 Java 和 数据库的数据字典怎么同步维护?

  •  
  •   loren20191 · 2019-10-15 14:56:24 +08:00 · 7241 次点击
    这是一个创建于 1865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题:数据库维护了一套数据字典表,java 系统里面为了避免 ‘魔法值’ 也会有一套枚举。那么如何同步数据库里面的字典表数据和程序里面的枚举属性? 例如
    SEX{
    MALE ( 1 ),
    FEMALE(2)
    }
    数据库
    classCode code value
    SEX 1 男
    SEX 2 女

    当数据库新增 code 3 雌雄同体, 怎么维护程序里面的枚举?(或者有没有不适用枚举的其它方式维护?)

    16 条回复    2019-10-19 13:46:54 +08:00
    wellCh4n
        1
    wellCh4n  
       2019-10-15 16:05:49 +08:00
    mark 一下,有同样的疑问
    phx13ye
        2
    phx13ye  
       2019-10-15 16:19:47 +08:00
    你 INSERT 的时候不经过程序吗,不需要多加一个枚举?
    gz911122
        3
    gz911122  
       2019-10-15 16:22:23 +08:00
    写好文档..

    尤其是上线评审之类的,可以一定程度上解决这个问题
    zpfhbyx
        4
    zpfhbyx  
       2019-10-15 16:26:16 +08:00
    comment 解析呗
    wanacry
        5
    wanacry  
       2019-10-15 16:28:46 +08:00
    为啥不直接查库缓存起来
    airfling
        6
    airfling  
       2019-10-15 16:32:14 +08:00
    hibernat @Enumerated 用这个注解
    Jrue0011
        7
    Jrue0011  
       2019-10-15 16:56:30 +08:00
    感觉可以写个类似 mybatis generator 或者 lombok 的工具?数据库表多加一个枚举名称字段,新增记录的时候指定枚举名称,然后工具查询生成对应枚举类.java 或者.class 文件。。。

    就是会比较麻烦。。。少的话还不如手动加枚举。。。
    jaryur
        8
    jaryur  
       2019-10-15 17:23:01 +08:00 via Android
    如果业务比较独立或者拆分边界清晰就放各自的枚举里面,而且需要放到专门的 jar 包里面维护,如果是复杂的字典可以基础服务暴露出来,需要本地缓存就封装下就好
    b0644170fc
        9
    b0644170fc  
       2019-10-15 18:18:15 +08:00
    我们公司以前也是这样的.有数据字典,有枚举类.当时我们是在枚举类里每新增一个枚举值,就必须执行下一个工具类,把数据插入到数据库中.这个工具类是怎么实现的,我当时也没看.

    从使用的角度来看,这样非常麻烦.还不如定义一个中的枚举类.然后把相关的内容汇总到一起,定义枚举值然后还要和数据库关联起来,有点麻烦
    mmdsun
        10
    mmdsun  
       2019-10-15 18:39:05 +08:00 via Android
    我们写了有代码生成器,常量类都是从数据库生成的。
    返回数据是写一个通用的转化器。例如,sex=1 这种数据,会动态增加一个字段 sex_cn=男
    Raymon111111
        11
    Raymon111111  
       2019-10-15 19:41:34 +08:00
    这个属于流程上的问题

    一个方法是在技术方案 review 的模板里新增这一项, 不容易忘
    joyous
        12
    joyous  
       2019-10-15 20:06:40 +08:00 via Android   ❤️ 1
    数据库为什么不存枚举字符串名?这样就不用维护了
    zhady009
        13
    zhady009  
       2019-10-16 08:07:20 +08:00 via iPhone
    mybatis typehandler 枚举都实现一个 getCode 的接口来返回对应的枚举 数据库只存 code
    zazalu
        14
    zazalu  
       2019-10-16 08:42:58 +08:00
    我能想到的就是写个脚本同步维护。。总之总要有一个“人”来维护这东西,要么人工,要么自动。
    zifuir
        15
    zifuir  
       2019-10-16 19:43:34 +08:00 via iPhone
    存枚举字符串名,不用数据字典,好处是只用维护枚举类,坏处是维护就要改代码
    joyous
        16
    joyous  
       2019-10-19 13:46:54 +08:00 via Android
    @zifuir 这个。。。不需要改代码的维护是哪种场景?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.