Java Hybris生成一个现有的PK

Java Hybris生成一个现有的PK,java,hybris,Java,Hybris,最近,我们已经将Hybris 5.4迁移到Hybris 6.5,但自从它生成了一个现有的PK之后(我们正在使用具有一些记录的同一个数据库) 在发展环境中,我们有: 删除所有现有记录 重试保存操作,直到生成新的PK 但是现在我们担心我们在生产中会遇到同样的问题,我们无法解决这个问题 我们可以做些什么来让Hybris考虑旧的PK呢?检查名为“counter.PK.generator.class”的系统属性(例如在hac中),在那里您有一个类可以为Hybris项目生成PK。打开该类并使用debugge

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

在发展环境中,我们有:

  • 删除所有现有记录
  • 重试保存操作,直到生成新的PK
  • 但是现在我们担心我们在生产中会遇到同样的问题,我们无法解决这个问题


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

    检查名为“counter.PK.generator.class”的系统属性(例如在hac中),在那里您有一个类可以为Hybris项目生成PK。打开该类并使用debugger查看生成的错误。

    前面的一条注释说:

    您有针对特定类型的此问题吗?如果是的话!您可以考虑更改部署表numbre以获得新的PK

    这让我想到,更改当前计数器以生成PK将是解决方案,然后我准备了一个groovy脚本来实现这一点

    例如,我们使用typecode:45定义了订单类型XML表示

    <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"/>
    

    当前的解决方案,解决了订单表的问题。下一步是对所有表执行此操作,如果我们使用表编号系列获取所有现有的序列键,这并不困难。

    升级后是否运行了更新系统?@Carlo是的,我执行了,这是强制性的,因为我们有一些新的类型/关系/属性。@MohamedNabli,您对特定类型有此问题吗?如果是的话!您可以考虑更改部署表numbre以获得新的PK。这可能会起作用,但几乎所有表都存在此问题@NomadeThis可能会有所帮助,我们阅读算法就足够了。与此同时,我在一个virgin数据库上检查行为。
    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)