2017-02-21 14 views
1

Я выполнил пример кода в разделе документации для dropwizard своего сайта и смог получить спящий режим для поиска объекта User по ID. Который работал отлично со следующим кодом:Dropwizard Hibernate - найти объект по значению, который не является идентификатором?

// 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); 
} 

Но это не работает, и Infact будет искать таблицу значений, где поле ID совпадает с именем ... I предположим, что это поведение по умолчанию, для автоматического Поиск в основном ключевом поле или что-то еще?

В любом случае, есть ли способ для меня, чтобы поиск происходил на другом поле?

ответ

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)); 
+0

Я на самом деле пытался это, и это работает, если я ударять DAO через покой Мой конечная точка - но не при попытке сделать что-либо с помощью аутентификатора. – MickeyThreeSheds

Смежные вопросы