Bar*_*lom 6 database hash hibernate jpa blob
我的User实体类包含密码哈希字段,它是一个具有固定长度的字节数组(32,因为它是SHA-256哈希).
@Entity
public class User {
@Column(nullable=false)
private byte[] passwordHash;
...
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我没有用任何特殊的东西注释它,只是一个NOT NULL.
这有效,但它会表现吗?我的架构是由Hibernate生成的,但我不确切知道它生成了什么(我目前正在使用内存中的HSQL数据库).
我很担心,因为它不知道它是一个固定长度的数组(注释的length字段Column只适用于字符串),它会将这个哈希存储在BLOB字段中,该字段作为指针添加到记录中(如果我正确理解数据库是如何工作的.
这是真的,我怎么能改变这个?我应该只使用base64或hex将哈希值编码为字符串,接受它的小的性能/正确性影响吗?
我担心,因为它不知道它是一个固定长度的数组(Column注释仅适用于字符串的长度字段),(...)
如果指定列的长度,Hibernate会使用这些信息来确定SQL列类型生成(TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB)虽然.
我需要的是BINARY(32)
你试过这个吗?
@Column(columnDefinition="BINARY(32) NOT NULL")
private byte[] passwordHash;
Run Code Online (Sandbox Code Playgroud)
小智 1
tinyblob 是一个很好的乐趣(mysql 类型参考),但我所有的应用程序都可以很好地使用字符串。如果您确实关心毫秒,请在分析器中尝试这两个版本,看看哪个版本效果最好。我首选的分析器是 netbeans 中包含的分析器。