Hybris - 无法增加 MySql 数据库中的列大小

Hybris - Unable to increase column size in MySql DB

我正在尝试将列大小从默认的 255 个字符增加到 1024 个字符。请注意,这是一个现有的生产项目类型 (AbstractOrderEntry) & 属性 (productDescription)。系统 init 不可能。

到目前为止,我已经尝试了这两种方法。

  1. 已修改 *-items.xml 文件。

           <attribute qualifier="productDescription" type="java.lang.String">
                <modifiers unique="false" optional="true" read="true" write="true"/>
                <persistence type="property">
                    <columntype database="oracle">
                        <value>varchar(1024)</value>
                    </columntype>
                    <columntype database="sqlserver">
                        <value>nvarchar(1024)</value>
                    </columntype>
                    <columntype database="hsqldb">
                        <value>VARCHAR(1024)</value>
                    </columntype>
                    <columntype>
                        <value>varchar(1024)</value>
                    </columntype>
                </persistence>
            </attribute>
    
  2. ant clean all & 系统更新。 没用

其他方法是: 从 mySql Workbench.

执行了 alter 语句

ALTER TABLE `hybrisDB`.`quoteentries` CHANGE COLUMN `p_productdescription` `p_productdescription` VARCHAR(1024) NULL DEFAULT NULL ;

我可以看到列大小从 SQL workbench 增加了。但是当我试图从 Hybris 中保存值时,它会抛出运行时异常。

INFO   | jvm 1    | main    | 2019/11/26 14:27:20.262 | com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'p_productdescription' at row 1
INFO   | jvm 1    | main    | 2019/11/26 14:27:20.262 |         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4118)
INFO   | jvm 1    | main    | 2019/11/26 14:27:20.262 |         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)```


Restarted Hybris after executing direct SQL statement from DB. 

Any other inputs?

您可以尝试重新声明该属性。

 <attribute qualifier="productDescription" redeclare="true" type="java.lang.String">
   <modifiers read="true" write="true" optional="true" unique="false" />
     <persistence type="property">
      <columntype>
          <value>HYBRIS.LONG_STRING</value>
      </columntype>
     </persistence>
</attribute>

在您的问题中,您提到了两种方法。我认为您可以通过结合这两种方法来设法实现您的 objective,即

  1. 修改$exntesion-items.xml --> ant clean all --> ant updatesystem
  2. 运行 直接在数据库上修改语句并启动 Hybris

相关:sap wiki 的摘录:

参考:help.sap.com

我会创建一个具有所需大小的新属性(在 items.xml 中),重建并执行系统更新,从现有属性迁移数据(使用 ImpEx)并相应地调整应用程序代码。不会太费力,也是最安全的做法。

但是,如果您仍想使用现有属性执行此操作,请确保在执行以下任何操作之前已备份数据:

一个。更改 items.xml 如下:

<persistence type="property">
    <columntype database="mysql">
        <value>TEXT</value>
    </columntype>
    <columntype>
        <value>varchar(1024)</value>
    </columntype>
</persistence>

您在问题中发布的 XML 中错过了提及 database="mysql"

乙。执行 ant clean all updatesystem 并测试您的应用程序。

摄氏度。如果不行,执行你已经做过的SQL ALTER命令;但是这次,请确保在执行 ALTER 命令后也执行系统更新。