【问题标题】:Hybris - Unable to increase column size in MySql DBHybris - 无法增加 MySql DB 中的列大小
【发布时间】:2019-11-27 00:54:35
【问题描述】:

我正在尝试将列大小从默认的 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 工作台增加了列大小。但是当我试图从 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?

【问题讨论】:

  • 我采用了直接 SQL 语句的方法。事实上,我必须做 3 条 sql 语句 - cartentriesquoteentriesorderentries
  • 另外,通过直接 SQL 更新,我不必执行 updatesystem / restart hybris

标签: java mysql hybris commerce


【解决方案1】:

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

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

相关:sap wiki 的摘录:

参考:help.sap.com

【讨论】:

    【解决方案2】:

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

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

    A.修改 items.xml 如下:

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

    您在问题中发布的 XML 中没有提及 database="mysql"

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗨乔 - 重新声明只能应用于抽象项目类型的属性,或者当您扩展项目时,您可以在子/子项目类型中重新声明它。否则系统会给你一个编译错误。所以它会起作用,但只有当一个有扩展项目时。
      • 它并不总是有效,最终会出现编译错误:(AttributeTagListener)][null] - 虽然属性被继承或重新声明,但没有超属性
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2012-04-16
      • 2017-01-15
      • 2013-06-29
      相关资源
      最近更新 更多