Hybris 生成现有的 PK

Hybris generates an existing PK

最近,我们已将 Hybris 5.4 迁移到 Hybris 6.5,但自从它生成一个现有的 PK(我们正在使用具有一些记录的同一个数据库)。

在开发环境中,我们有:

  1. 已删除所有现有记录。
  2. 重试保存操作直到生成新的 PK。

但是现在我们怕在生产中会遇到同样的问题,所以我们不能做这个解决方法。

如何让Hybris兼顾老PK?

检查名为 'counter.pk.generator.class' 的系统 属性(例如在 hac 中),您有一个 class 可以为 Hybris 项目生成 PK。打开 class 并使用调试器查看生成有什么问题。

之前的评论说:

Do you have this issue for a specific type ? if yes ! You can think to change the deployment table numbre to get a new PK.

这让我想到更改 PK 生成的当前计数器将是解决方案,然后我准备了一个 groovy 脚本来执行此操作。

例如,我们的订单类型 XML 表示定义为类型代码:45。

<itemtype code="Order" extends="AbstractOrder" jaloclass="de.hybris.platform.jalo.order.Order" generate="true" singleton="false" jaloonly="false" autocreate="true">
    <deployment table="orders" typecode="45"/>

所以要更改其计数器的 groovy 文件是:

import de.hybris.platform.core.Registry;
import de.hybris.platform.core.PK.PKCounterGenerator;
import de.hybris.platform.persistence.numberseries.SerialNumberGenerator;

int key = 45;
int current = new de.hybris.platform.core.DefaultPKCounterGenerator().fetchNextCounter(key);
SerialNumberGenerator generator = Registry.getCurrentTenant().getSerialNumberGenerator();
generator.removeSeries("pk_"+key);
generator.createSeries("pk_"+key,1,current*10)

目前的解决方案,只解决了订单的问题Table。下一步是让它发生在所有 table 上,如果我们使用 table 数字序列来获取所有现有的序列键,这并不困难。