使用模式

时间:2016-05-18 12:42:44

标签: java oracle hibernate sequence

首先,我希望通过对问题的反思(这是相当复杂的)和可能的解决方案(甚至是简单的想法受到欢迎)来接受这类问题。

让我们一起去集思广益的世界!

假设我有一张桌子"产品"在其中我有两个字段叫做#34; prd_id"和" prd_num"。 - " prd_id"是主键,并使用Oracle序列(mySeq.nextval)递增。 - " prd_num"是" prd_id"的副本。并主要用于显示/逻辑目的。

问题在于" prd_num"对用户来说变得过于复杂(关于它的使用)。

所以我们的想法是创建一个新的序列来增加字段" prd_num"沿着" prd_id"的增量(使用旧序列)但是这里的不同之处在于我们能够基于使用app的客户端指定某个模式(可能使用xml配置文件等)(客户端之间的区别是通过表格中的另一个字段完成"产品"。

例子:对于client1,我们将定义模式" CLT1XXXX" XXXX是一个简单的增量。

SO =>我不认为Oracle可以处理这种类型的序列(将字母与特定模式中的数字混合)所以欢迎Java / hibernate中的任何想法。

希望听到一些想法!

1 个答案:

答案 0 :(得分:0)

您可以使用触发器,例如BEFORE INSERT触发器。这样,您可以根据其他列的值使用值填充列。

例如:

create or replace trigger product_insert
before insert on product
begin
  :new.prd_num := :new.column_with_client_distinction || to_char(:new.prd_id);
end;
/

(请注意,Hibernate不会自动识别由触发器填充的任何列值。)