Hybris 自定义 table 每次都被覆盖
Hybris custom table getting overwritten each time
我在我的自定义扩展中定义了一个自定义项目类型。它使用默认的 hsql 数据库。它应该为每个订单保存所有与交易相关的元数据。但是,每次我从店面下订单时,它都会替换以前存储的数据,因此最后,table 中只剩下一行数据。
我试着查看 hybris wiki,但找不到任何需要为此设置的 属性。
这是我扩展的 item.xml 文件中的项目类型定义
<itemtype code="PaymetricITransHeaderObject2"
extends="GenericItem"
autocreate="true"
generate="true">
<deployment table="ITransPayLoadTable2" typecode="11011"/>
<attributes>
<attribute qualifier="trans_id" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false" unique="true"/>
<persistence type="property" />
</attribute>
<attribute autocreate="true" qualifier="payload" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false"/>
<persistence type="property">
<columntype>
<value>varchar(8K)</value>
</columntype>
</persistence>
</attribute>
</attributes>
</itemtype>
这是一个 java 代码保存了这个类型
public PaymetricITransHeaderObject2Model iTransactionHeaderObj = new PaymetricITransHeaderObject2Model();
iTransactionHeaderObj.setTrans_id("1234");
iTransactionHeaderObj.setPayload("some long string....");
Transaction tx = Transaction.current();
try
{
tx = Transaction.current();
tx.begin();
modelService.save(iTransactionHeaderObj);
tx.commit();
}
catch (final Exception e)
{
if (null != tx)
{
tx.rollback();
}
e.printStackTrace();
}
如有任何建议,我们将不胜感激!!
我正在使用 Hybris 6.4 版本
谢谢
<attribute qualifier="trans_id" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false" unique="true"/>
<persistence type="property" />
</attribute>
此处您已将 trans_id
声明为唯一 (unique="true"
),因此请确保每次在 class.
中设置唯一 trans_id
喜欢:
iTransactionHeaderObj.setTrans_id(transGenerator.generate().toString());
查看 Persistent Key Generation 以生成唯一编号
local.properties
keygen.serialNumber.code.name=serial_number_code
keygen.serialNumber.code.digits=10
keygen.serialNumber.code.start=7000000000
keygen.serialNumber.code.type=numeric
keygen.serialNumber.code.template=$
*spring.xml
<bean id="serialNumberCodeGenerator" class="de.hybris.platform.servicelayer.keygenerator.impl.PersistentKeyGenerator">
<property name="key" value="${keygen.serialNumber.code.name}"/>
<property name="digits" value="${keygen.serialNumber.code.digits}"/>
<property name="start" value="${keygen.serialNumber.code.start}"/>
<property name="type" value="${keygen.serialNumber.code.type}"/>
<property name="template" value="${keygen.serialNumber.code.template}"/>
</bean>
.java
@Resource
private KeyGenerator serialNumberCodeGenerator;
String serialNumber = serialNumberCodeGenerator.generate().toString();
我在我的自定义扩展中定义了一个自定义项目类型。它使用默认的 hsql 数据库。它应该为每个订单保存所有与交易相关的元数据。但是,每次我从店面下订单时,它都会替换以前存储的数据,因此最后,table 中只剩下一行数据。 我试着查看 hybris wiki,但找不到任何需要为此设置的 属性。
这是我扩展的 item.xml 文件中的项目类型定义
<itemtype code="PaymetricITransHeaderObject2"
extends="GenericItem"
autocreate="true"
generate="true">
<deployment table="ITransPayLoadTable2" typecode="11011"/>
<attributes>
<attribute qualifier="trans_id" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false" unique="true"/>
<persistence type="property" />
</attribute>
<attribute autocreate="true" qualifier="payload" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false"/>
<persistence type="property">
<columntype>
<value>varchar(8K)</value>
</columntype>
</persistence>
</attribute>
</attributes>
</itemtype>
这是一个 java 代码保存了这个类型
public PaymetricITransHeaderObject2Model iTransactionHeaderObj = new PaymetricITransHeaderObject2Model();
iTransactionHeaderObj.setTrans_id("1234");
iTransactionHeaderObj.setPayload("some long string....");
Transaction tx = Transaction.current();
try
{
tx = Transaction.current();
tx.begin();
modelService.save(iTransactionHeaderObj);
tx.commit();
}
catch (final Exception e)
{
if (null != tx)
{
tx.rollback();
}
e.printStackTrace();
}
如有任何建议,我们将不胜感激!!
我正在使用 Hybris 6.4 版本
谢谢
<attribute qualifier="trans_id" type="java.lang.String">
<modifiers read="true" write="true" search="true" optional="false" unique="true"/>
<persistence type="property" />
</attribute>
此处您已将 trans_id
声明为唯一 (unique="true"
),因此请确保每次在 class.
喜欢:
iTransactionHeaderObj.setTrans_id(transGenerator.generate().toString());
查看 Persistent Key Generation 以生成唯一编号
local.properties
keygen.serialNumber.code.name=serial_number_code
keygen.serialNumber.code.digits=10
keygen.serialNumber.code.start=7000000000
keygen.serialNumber.code.type=numeric
keygen.serialNumber.code.template=$
*spring.xml
<bean id="serialNumberCodeGenerator" class="de.hybris.platform.servicelayer.keygenerator.impl.PersistentKeyGenerator">
<property name="key" value="${keygen.serialNumber.code.name}"/>
<property name="digits" value="${keygen.serialNumber.code.digits}"/>
<property name="start" value="${keygen.serialNumber.code.start}"/>
<property name="type" value="${keygen.serialNumber.code.type}"/>
<property name="template" value="${keygen.serialNumber.code.template}"/>
</bean>
.java
@Resource
private KeyGenerator serialNumberCodeGenerator;
String serialNumber = serialNumberCodeGenerator.generate().toString();