我有一個包含一系列唯一字符串的表,我需要提供快速查找(除了內存緩存)。Hibernate快速查找表中唯一字符串的方法
@Entity
public class UniqueString {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Basic
@NaturalId
private String stringId;
}
最初我有stringId
變量作爲@Id
,但事實證明,某些數據庫(例如,Oracle)的檢索由字符串ID的對象時進入full table scan
;因此我轉而選擇了很長一段時間。
如何從字符串stringId
快速訪問UniqueString
對象。我看到了兩個解決方案,到目前爲止:
- 同樣,註釋
stringId
與@id
,並試圖解釋爲什麼會出現在一些數據庫full table scans
- 哈希串入一個
long
(而失去精度),以找到一個解決並使用查找表返回匹配散列的所有對象,然後比較它們的stringId
屬性是否相等以找到我們正在尋找的匹配項,例如:
。
LookupTable UniqueString
+----+------+ +----+----+----------+
|hid | hash | | id |hid | stringId |
+----+------+ +----+----+----------+
| 1 | 123 | -------------> | .. | 1 | .... |
| 2 | 321 | `-----> | .. | 1 | .... |
+----+------+ +----+----+----------+
意見,建議?
[編輯]好吧,我認識到,我的上表說明可以簡單地歸到
UniqueString
+----+-----+----------+
| id |hash | stringId |
+----+-----+----------+
| .. | 123 | .... |
| .. | 123 | .... |
| .. | 321 | .... |
+----+-----+----------+
這使得所有的差異,因爲我懷疑下面兩個查詢將執行大致相同:
from UniqueString where hash='123'
from UniqueString where stringId='abc'