我有一个包含一系列唯一字符串的表,我需要提供快速查找(除了内存缓存)。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'