请教 Java 和 数据库的数据字典怎么同步维护? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loren20191
V2EX    Java

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

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

    如题:数据库维护了一套数据字典表,java 系统里面为了避免 ‘魔法值’ 也会有一套枚举。那么如何同步数据库里面的字典表数据和程序里面的枚举属性? 例如
    SEX{
    MALE ( 1 ),
    FEMALE(2)
    }
    数据库
    classCode coe 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
    写好文档..

    尤其是上线评审之类的,可以一定程度上解决这个问题
    justseemore
        4
    justseemore  
       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     Solana     2073 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:53 PVG 08:53 LAX 17:53 JFK 20:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86