我想使用Hibernate 3.5將規範化Java模型映射到傳統數據庫模式。一個特定的表格將位於一對多關係中的外鍵編碼爲位數組列。休眠位陣列到實體映射
考慮表person
和club
描述人的隸屬關係到俱樂部:
person: .----.------. club: .----.---------.---------------------------.
| id | name | | id | name | members | binary(members) |
|----+------| |----+---------|---------+-----------------|
| 1 | Bob | | 10 | Cricket | 0 | 000 |
| 2 | Joe | | 11 | Tennis | 5 | 101 |
| 3 | Sue | | 12 | Cooking | 7 | 111 |
'----'------' | 13 | Golf | 3 | 100 |
'----'---------'---------'-----------------'
所以希望很顯然,person.id
用作位陣列club.members
在位索引:
.---.---.---.
| S | J | B |
| u | o | o |
| e | e | b |
|---+---+---|
| 1 | 0 | 1 |
'---'---'---'
在這個例子的members
列告訴我們:
- 沒有一個是板球---沒有標誌設置
- 鮑勃/蘇的成員 - >網球---在位置1和3標誌設置
- 鮑勃/蘇/喬 - >烹飪---在位置1,2和3標誌設置
- 蘇 - >高爾夫球---在第3位標誌設置
現在,在這個例子中連接表可以一直使用,而不是這將事情簡單化並避免許多潛在的問題 - 例如:members
的最大範圍對people
行的數量設置了上限。然而,我堅持這個模式,似乎有些人贊成使用位數列的方式。
在我的Java領域我想這個模式與實體,像這樣的模型:
class Person {
private int id;
private String name;
...
}
class Club {
private Set<Person> members;
private int id;
private String name;
...
}
我假設我必須使用UserType
實現,但一直無法尋找到的物品描述的任何示例用戶類型是對實體的引用 - 而不是文字字段值 - 或其組合。此外,我知道我將不得不考慮在加載club
實例時如何獲取person
實體。
誰能告訴我如何用Hibernate來馴服這個遺留模式嗎?
更新
我最近不得不重新審視這種類型的映射在傳統的數據庫。這一次變得很明顯,我們的members
表的等價物實際上是一個靜態集,可以硬編碼爲Enum
。通過這種簡化,實現在位陣列和一組枚舉之間轉換的Hibernate UserType
相當簡單。
是你永遠能算出這個? – rj2700 2016-12-15 04:26:25