属性的修饰符不会影响items.xml中的数据库,为什么会这样?

时间:2017-03-09 13:25:31

标签: java mysql hsqldb hybris items

在Hybris项目中,我创建了 new " custom" items.xml 中的实体(从GenericItem扩展)。 在 ant清除所有 ant初始化之后,所有表格都会完美生成,但可选唯一修饰符不会#39; t对指定的属性有任何影响。 我的items.xml的片段:

<attribute qualifier="someQualifier" type="java.lang.Long">
  <description>some desctiontion</description>
  <persistence type="property"/>
  <modifiers optional="false" unique="true"/>
</attribute>

在我的数据库中(在MySQL和HSQL上测试),可选且唯一的标记属性仍然具有默认值(nullable = true,unique = false)。 这可能是什么问题?

2 个答案:

答案 0 :(得分:3)

这些修饰符用于对应的ValidateInterceptor,而不是表结构。 要指定列定义,请使用:

    <persistence type="property">
        <columntype database="mysql">
            <value>int(11) not null</value>
        </columntype>
        ....
    </persistence>

要使其唯一,请将索引定义添加到itemtype

    <indexes>
        <index name="someQualifierIDX" unique="true">
            <key attribute="someQualifier"/>
        </index>
    <indexes>

答案 1 :(得分:0)

这里的问题是jaloclass。在ant all之后,它会尝试在-items.xml文件中为您的itemtype创建一个jaloclass。如果您的itemtype没有jaloclass,则会使用您的修饰符创建。

另一方面,如果您尝试在-items.xml文件中修改(或删除)itemtype,则表示您的itemtype存在现有的jaloclass。它无法修改修饰符。要更新修饰符,您应该删除ant all之前的jaloclass。