属性的修饰符不会影响 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 all和ant initialize之后,所有的表都完美生成了,但是optional和unique修饰符没有'对指定的属性没有任何影响。 我的 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 中的数据库,这是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章