小弟想问下,ORACLE + HIBERNATE,主键想存成“特定字符 + 顺序号”这种形式,例如1011000,其中101是配置文件写死的,1000是顺序递增的,想问下,怎么实现比较好?谢谢。

解决方案 »

  1.   

    hibernate提供的集中自动生成策略都不能直接拿来用,比如@TableGenerator、@SequenceGenerator 、、、所以还是自己去维护比较好,
    可以参考@TableGenerator建一个序列号表,表里对应表中最大的顺序递增值,然后每次执行插入时,重新拼主键id(特定字符 + 最大值+1)
      

  2.   

    我也遇到过这个问题,在做日志管理的时候,主键是日期+顺序号。我是这么解决的:
    用模糊查找找到当天最大的主键然后转化为Long型的,加1,转化成字符串,作为当前记录的主键。你这个问题也可以查询select max(id) from tableName where id like '101%',然后让结果加1作为当前插入记录的主键。
    作为初学者,我只能想到这个方法了,希望能解决楼主的问题。
      

  3.   

    自定义生成器可能就类似于这种,具体还要再看
    @Id @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    public String getId() {@Id @GeneratedValue(generator="hibseq")
    @GenericGenerator(name="hibseq", strategy = "seqhilo",
        parameters = {
            @Parameter(name="max_lo", value = "5"),
            @Parameter(name="sequence", value="heybabyhey")
        }
    )
    public Integer getId() {