我正在努力将大型机迁移到java。我在DB2中有一个表。我正在将这张桌子复制为Gemfire中的一个区域。在执行此操作时,我为该表提供了复合主键。将表复制到gemfire区域。我想为区域制作复合主键。我只是想知道,是否有可能在区域中创建复合主键?
答案 0 :(得分:1)
理想情况下,您创建的键在键/值对被放置后不会改变值#34; put"进入一个地区。 GemFire / Geode Region只是java.util.Map
的一个美化版本(确切地说是HashMap)。
这意味着"复合" key不应该基于Region值本身的任何属性值。举例来说,假设我有一个像这样定义的值Customer
......
class Customer {
Long accountNumber;
Gender gender;
LocalDate birthDate;
String firstName;
String lastName;
...
}
然后创建一个像这样的密钥是不可取的......
class CustomerKey {
LocalDate birthDate;
String firstName;
String lastName;
}
虽然一个人的出生日期,名字和姓氏通常足以唯一地标识某人,但如果这些单独的属性/字段值中的任何一个发生变化,那么鉴于Java的内在行为,您将失去配对{{1 (所以要小心)。
您还应该注意谨慎地制作任何" custom / composite"的Map
方法。你创建的关键类。
我通常建议您使用内部(仅对应用程序已知),键的标量类型,例如: equals/hashCode
或Long
。
这就像向String
类添加属性/字段一样简单,就像这样......
Customer
大多数情况下,您的(OQL)查询谓词基于各个域对象属性/字段的值,而不是键。例如......
class Customer {
Long id;
...
}
此外,如果您的密钥是SELECT c FROM /Customers c WHERE c.lastName = 'Doe'
,则可以使用UUID类生成唯一值。否则,您将需要制定自己独特的密钥生成策略。
总之,虽然您可以根据Java中精心设计的类类型提出要求,但通常不建议这样做;更喜欢简单的标量类型。
对于一般情况,请注意以下事项link。
希望这有帮助。
-John