Dropwizard Hibernate - 按值而不是ID查找实体?

时间:2017-02-21 19:48:13

标签: hibernate dropwizard

我在他们网站的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字段与名称匹配的值...我想这是默认行为,自动搜索主键字段或其他什么内容?

无论如何,有没有办法让我在另一个领域进行搜索?

1 个答案:

答案 0 :(得分:1)

您应该使用Criteriaorg.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));