【发布时间】:2011-04-18 19:27:03
【问题描述】:
我的User 实体类包含密码哈希字段,这是一个固定长度的字节数组(32,因为它是 SHA-256 哈希)。
@Entity
public class User {
@Column(nullable=false)
private byte[] passwordHash;
...
}
如您所见,我没有用任何特殊的注释对其进行注释,只是一个 NOT NULL。
这可行,但它会执行吗?我的架构是由 Hibernate 生成的,但我不知道它究竟生成了什么(我目前正在使用内存中的 HSQL 数据库)。
我担心,因为它不知道它是一个固定长度的数组(Column 注释的length 字段仅适用于字符串),它会将此哈希存储在一个 BLOB 字段中作为指针添加到记录中(如果我正确理解数据库的工作原理)。
这是真的吗,我该如何改变?我是否应该将哈希编码为字符串,使用 base64 或十六进制,接受它对性能/正确性的小影响?
【问题讨论】:
-
为什么不用实际的目标数据库试试,看看它会生成什么?
-
@skaffman:我已将数据库更改为 MySQL,它会生成一个 TINYBLOB 列
-
虽然我认为这真的无关紧要。我永远不会通过密码哈希进行索引,我一次只需要读取一条记录。不过,出于学术目的,我仍然有兴趣让它变得完美。
标签: database hibernate jpa hash blob