我是hybris的新手,什么是差异关系和收藏,为什么我们选择关系而不是收藏。
答案 0 :(得分:9)
基本上,在hybris中有两种技术上不同的建模集合方式:
CollectionTypes
RelationTypes
答案 1 :(得分:9)
我完全同意@KilleKat评论,他提到了Hybris中CollectionType和RelationType之间的所有差异。
我附上了一些图表,以便更清楚地了解这个主题。
答案 2 :(得分:1)
了解hybris非常重视阻止使用集合,而是使用关系。
如上所述,集合被保持为逗号与数据结构前瞻性分离,这就是为什么你可能会看到数据截断的问题,其中关系具有创建新表的合理数据结构和映射表以加入两个表。 / p>
由于存储结构的集合 - 无法搜索。
我想说一个非常简单的(1:n)与有限数据的关系 - 你仍然可以使用集合。而对于任何复杂的(m:n / 1:n)关系,总是使用关系
答案 3 :(得分:1)
正如Sumit所说,
不建议使用CollectionType,并且应尽可能使用RelationType。这是因为,CollectionType的数据库字段的最大长度是有限的,具有许多值的CollectionType最终可能会截断其值。此外,CollectionTypes的值以CSV格式写入,而不是以标准化方式写入。因此,hybris建议尽可能使用RelationTypes。
对于关系中的每个条目(换句话说,对于从一个项目到另一个项目的每个链接),存在一个LinkItem实例,用于存储相关项目的PK。 LinkItem实例由平台透明地自动处理:在API级别,您只需要使用相应的getter和setter方法。
答案 4 :(得分:0)
在集合中,我们的大小有限,如果我们尝试插入更多数据,它将被截断。 我们可以使用的关系n不。数据。
集合比关系更快,但在集合中我们只能使用一对多的关系,对于很多对很多我们应该只使用关系....
答案 5 :(得分:0)
添加Raghav添加的内容,内部集合作为PK的csv存储在单个列中。因此,由于任何数据库中的字段长度限制而导致大小限制。
然而,关系可以存储在单独的表中,因此可以进行无限制的映射。
答案 6 :(得分:0)
收藏 集合层次结构中的根接口。
Collection表示一组对象,称为其元素。
某些集合允许重复元素,而其他集合则不允许。
有些是有序的,有些是无序的
为了更好地了解每个集合的优点及其性能特征,我建议您对数据结构(如数组,链接列表,二进制搜索树,Hashtables以及堆栈和队列)有一个很好的了解。如果你想成为任何语言的有效程序员,那么学习它是没有任何替代的。
HashMap仅用于存在某些逻辑上需要具有与值
对应的特殊键的情况答案 7 :(得分:0)
集合作为序列化对象保存在数据库的单个列中。
关系以通常的关系数据库方式持久存在 - 在另一个表或链接表上使用外键(取决于关系的基数)
不鼓励使用集合类型,因为它们无法使用flexiblesearch进行搜索,并且在处理多个对象的集合时具有显着的性能限制。
答案 8 :(得分:0)
集合和关系之间的确切区别是:
“数据如何在两者中存储”
在集合中,将在table(item)中创建一个新列,其中包含列表元素的逗号分隔主键。实际的列表元素存储在另一个表中。
在关系中,将创建一个新表作为两个项目类型之间的链接表。
您可以阅读完整的差异here。
答案 9 :(得分:0)
一对多的关系可以通过Collection和relation实现
为什么在某些情况下,Hybris 中的集合优于关系
集合 - 一对多关系的替代
示例:用户和地址
这里的 Address 是 Collection 类型,并作为 AddressCollection 映射到 User。 用户必须需要一个地址对象,但对于地址,不需要有 UserModel 引用(一个用户可以有多个地址)。 这就是为什么集合比关系更受欢迎。
<collectiontype code="AddressCollection" elementtype="Address" autocreate="true" generate="false"/>
<itemtype code="User"
extends="Principal"
jaloclass="de.hybris.platform.jalo.user.User"
autocreate="true"
generate="true">
<deployment table="Users" typecode="4" propertytable="UserProps"/>
<attributes>
<attribute autocreate="true" qualifier="addresses" type="AddressCollection">
<modifiers read="true" write="true" search="false" optional="true" partof="true"/>
<persistence type="jalo"/>
</attribute>
</attributes>
</itemtype>
关系 - 一对多
示例:用户和订单
在这里,一个用户可以下任意数量的订单!。 用户需要 OrderModel 引用,而对于 OrderModel ,它需要 UserModel 对象引用。 将创建双向链接。
<relation code="User2Orders" generate="true" localized="false" autocreate="true">
<sourceElement type="User" cardinality="one" qualifier="user">
<modifiers read="true" write="true" search="true" optional="false"/>
</sourceElement>
<targetElement type="Order" cardinality="many" qualifier="orders">
<modifiers read="true" write="true" search="true" optional="true" partof="true"/>
</targetElement>
</relation>