是这样的,我正在使用一个第三方的 ORM 框架,它的实体只支持以Long为主键,而我的业务逻辑大部分则需要以String为主键。我想到的一个方案是写一个映射函数来将业务主键的String映射成Long来提供给框架使用。直接使用String的hashCode()方法似乎比较简单,但是感觉碰撞的概率应该很大。有没有其它好的实现方式呢?

是这样的,我正在使用一个第三方的 ORM 框架,它的实体只支持以Long为主键,而我的业务逻辑大部分则需要以String为主键。我想到的一个方案是写一个映射函数来将业务主键的String映射成Long来提供给框架使用。直接使用String的hashCode()方法似乎比较简单,但是感觉碰撞的概率应该很大。有没有其它好的实现方式呢?
1 ninion Oct 25, 2019 CRC64 ? |
2 jwk345 div class="badges"> Oct 25, 2019 via iPhone 再加个字段 |
3 MrZhaoyx Oct 25, 2019 |
4 p2pCoder Oct 25, 2019 MurmurHash |
6 YUyu101 Oct 26, 2019 想不碰撞就不能压缩,那你的 string 长度不能太长,不然不可能不碰撞吧。 或者你 hash 再加个时间戳,一次性映射并存储,以后直接读 long,不要再转换了。 |
7 msg7086 Oct 26, 2019 不碰撞就只能完全映射,string 到 long 要不碰撞的话只能 8 字节以内,否则必然总有一天会碰。 |
8 love Oct 26, 2019 via Android 如果字符串只存明文的话可以保存长很多 |
10 mutalisk Oct 27, 2019 cityhash |
11 mutalisk Oct 27, 2019 楼上老哥说的 murmurhash 也可以 |