我有一个User
实体,其中包含用户名,名称和其他非敏感信息。
在身份验证期间,我需要查询密码(哈希值)和密码salt以进行哈希比较。由于它们的敏感性,这两个属性不属于模型的一部分。
如何在不使用CreateSQLQuery
的情况下在NHibernate中查询这两个属性?我现在CreateSQLQuery
有效,但我试图找到一种非SQL方式。
答案 0 :(得分:2)
创建一个DTO,该DTO将映射到与User
相同的表格,并且仅用于此目的,并使用它。
例如 -
public class AuthUserDTO
{
public virtual string Username {get; set;}
public virtual string PasswordHash {get; set;}
public virtual string Salt {get; set;}
}
所有“常规”方法都会返回常规User
对象,但GetUserForAuthentication
会返回AuthUserDTO
。
答案 1 :(得分:1)
您可以使用“access”属性在映射文件中使用仅查询属性。例如。在你的hbm文件中:
<property name="PasswordHash" type="string" column="PasswordHash" access="none" />
这将允许您在HQL或Criteria查询中查询PasswordHash,就像它是普通属性一样,但您的用户类中实际上没有PasswordHash属性。