Hybris产生了现有的PK

时间:2018-02-12 10:02:08

标签: java hybris

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

在开发环境中,我们有:

  1. 删除了所有现有记录。
  2. 重新执行保存操作,直到生成新的PK。
  3. 但现在我们担心生产中会出现同样的问题,我们无法解决这个问题。

    我们可以做些什么来让Hybris考虑旧的PK?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

之前的评论说:

  

您是否针对特定类型遇到此问题?如是 !您可以考虑更改部署表numbre以获取新的PK。

这让我觉得改变PK生成的当前计数器将是解决方案,然后我准备了一个groovy脚本来做它。

例如,我们使用typecode定义了订单类型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)

当前的解决方案,解决了Orders Table的问题。下一步是让所有表都能实现,如果我们使用表编号来获取所有现有的系列密钥,这将不会很困难。