[英]How to create composite primary key scenario in Gemfire region?
我正在將大型機遷移到Java。 我在DB2中有一張表。 我將此表復制為Gemfire中的一個區域。 在執行此操作時,我具有該表的復合主鍵。 將表復制到gemfire區域。 我要為區域設置復合主鍵。 我只想知道,是否有可能在區域中創建復合主鍵?
理想情況下,您要創建在“鍵/值”對“放入”區域后值不會改變的鍵。 GemFire / Geode Region只是java.util.Map
(准確地說是HashMap )的美化版本。
這意味着“復合”鍵不應基於Region值本身中的任何屬性值。 舉例來說,假設我有一個這樣定義的值Customer
:
class Customer {
Long accountNumber;
Gender gender;
LocalDate birthDate;
String firstName;
String lastName;
...
}
然后像這樣創建密鑰是不明智的...
class CustomerKey {
LocalDate birthDate;
String firstName;
String lastName;
}
雖然一個人的出生日期,名字和姓氏通常足以唯一地標識一個人,但是如果這些單獨的屬性/字段值中的任何一個發生了變化,那么鑒於Java Map
的固有行為,您將失去配對(因此請小心)。
您還應該小心謹慎地創建任何“自定義/復合”鍵類的equals/hashCode
方法。
我通常建議您為鍵使用內部(僅對於應用程序而言是已知的)標量類型,例如Long
或String
。
就像將屬性/字段添加到Customer
類一樣簡單...
class Customer {
Long id;
...
}
在大多數情況下,您的(OQL)查詢謂詞是基於各個域對象屬性/字段的值,而不是鍵。 例如...
SELECT c FROM /Customers c WHERE c.lastName = 'Doe'
此外,如果鍵是String
,則可以使用UUID類生成唯一值。 否則,您將需要制定自己獨特的密鑰生成策略。
總而言之,盡管您可以使用Java中精心設計的類類型來詢問您所要提出的問題,但通常不建議這樣做。 更喜歡簡單的標量類型。
這里是一個鏈接到一些普遍的事情要記住。
希望這可以幫助。
-約翰
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.