属性的修饰符不会影响 items.xml 中的数据库,这是为啥呢?

Posted

技术标签:

【中文标题】属性的修饰符不会影响 items.xml 中的数据库,这是为啥呢?【英文标题】:Modifiers of attributes do not affect database in items.xml, why is that?属性的修饰符不会影响 items.xml 中的数据库,这是为什么呢? 【发布时间】:2017-03-09 13:25:31 【问题描述】:

在一个 Hybris 项目中,我在 items.xml(从 GenericItem 扩展)中创建了 new“自定义”entities。 在ant clean allant initialize之后,所有的表都完美生成了,但是optionalunique修饰符没有'对指定的属性没有任何影响。 我的 items.xml 的 sn-p:

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

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

【问题讨论】:

Hybris 似乎是一家与 SAP 相关的公司。也许你的意思是 Hibernate 或其他 ORM。 我的意思是 Hybris 作为 SAP 相关框架。 好的。我的错。 您是否在 HMC 中检查过您的属性是否具有可选标志 false 和唯一标志 true。签入系统 -> 类型 -> Your_Model。 【参考方案1】:

这些修饰符是针对相应的 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>

【讨论】:

谢谢!是否有任何可能的解决方案可以通过初始化来影响 items.xml(或任何其他地方)的表结构,以使指定的属性唯一或不为空?【参考方案2】:

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

另一方面,如果您尝试在 -items.xml 文件中修改(或删除)您的 itemtype,这意味着您的 itemtype 存在一个现有的 jaloclass。它不能修改修饰符。要更新修饰符,您应该删除 ant all 之前的 jaloclass。

【讨论】:

以上是关于属性的修饰符不会影响 items.xml 中的数据库,这是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

python正则表达式--flag修饰符match对象属性

浅析Vue中的 .sync 修饰符

@property的4类修饰符

修饰符和关键字和继承

Java类成员之属性

Java中各种(类方法属性)访问修饰符与修饰符的说明