Java Hybris生成一个现有的PK
最近,我们已经将Hybris 5.4迁移到Hybris 6.5,但自从它生成了一个现有的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考虑旧的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)