我在他们网站的dropwizard文档部分跟踪了代码示例,并设法使hibernate工作以通过ID查找我的User对象。使用以下代码可以正常工作:
// Finds a single user, by their ID.
public User findOne(String id)
{
get(id);
}
现在,我的下一个问题是我也想要类似于此的内容,我可以通过用户名找到各种功能(包括在注册阶段保持用户名唯一)
我已尝试将代码调整为以下内容:
// Finds a single user, by their ID.
public User findOne(String name)
{
get(name);
}
但这不起作用,并且实际上将在表格中搜索ID字段与名称匹配的值...我想这是默认行为,自动搜索主键字段或其他什么内容?
无论如何,有没有办法让我在另一个领域进行搜索?
答案 0 :(得分:1)
您应该使用Criteria
(org.hibernate.Criteria
)
public List<User> findOne(String name) {
Criteria c = criteria().add(Restrictions.eq("name", name));
return list(c);
}
如果需要,可以混合使用
Criteria c = criteria()
.add(Restrictions.eq("accountId", accountId))
.add(Restrictions.eq("email",email));
return Optional.fromNullable(uniqueResult(c));