根据列值使用不同的顺序生成主键

时间:2019-07-25 01:42:33

标签: hibernate primary-key

我有一个具有列C1的表TABLE1。列C1是表TABLE2中的外键。在TABLE1中,当插入行时,我想使用基于C1值的序列为该行生成主键。因此,如果C1的值为1,那么我想从序列seq1生成主键。如果C1的值为2,那么我想从序列seq2生成主键,依此类推。

我当时正在考虑使用一个存储过程,可以向其中提供C1中的值。基于C1中的值,存储过程将选择正确的序列并从那里获取值。对于这种方法,我相信我将需要某种休眠的自定义ID生成器。但是,我不确定在TABLE1中插入新行时如何为自定义ID生成器指定C1的值。该值需要提供给存储过程。

如果有更好的替代方法,我很乐意接受。

1 个答案:

答案 0 :(得分:0)

我认为有更好的方法可以做到这一点。而不是使用这种方法:

  

我想使用基于C1值的序列为该行生成主键

我将使用代理密钥。为了生成上面确定的业务密钥,我将在插入时使用触发器函数。触发功能将检查C1的值,并根据C1的值生成业务密钥。这是一种干净且简单的方法。唯一的缺点是Java开发人员可能很难弄清楚该值是如何生成的(我可以在代码中留下注释)。