2014-10-29 3 views
3

Возможно ли иметь необязательные (нулевые) параметры с запросами jDBI? Я пытаюсь получить дополнительные параметры, работающие в запросе базы данных. Я работаю с dropwizard.Необязательный параметр jDBI

@SqlQuery("SELECT * \n" + 
      "FROM posts \n" + 
      "WHERE (:authorId IS NULL OR :authorId = author_id)") 
public List<Post> findAll(@Bind("authorId") Optional<Long> authorId); 

Запрос работает, когда прошел AuthorID, но дает мне эту ошибку, когда он является NULL:

org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1 

Это маршрут ресурс я звоню из:

@GET 
public ArrayList<Post> getPosts(@QueryParam("authorId") Long authorId) 
{ 
    return (ArrayList<Post>)postDao.findAll(Optional.fromNullable(authorId)); 
} 

Из того, что я читал, это можно сделать, поэтому я предполагаю, что у меня что-то отсутствует или явная ошибка. Любая помощь будет принята с благодарностью!

FYI - Я также пробовал его без guava Необязательный (который поддерживается dropwizard) - просто отправка authorId как Long, который является нулевым. Это также работает до тех пор, пока оно не является нулевым.

+0

Вы должны проверить [jdbi сообщество] (http://jdbi.org/community.html) – zloster

+0

Благодаря @zloster, я отправил это там. – nckturner

ответ

4

Вам нужно использовать версию java8 DBIFactory для вашего класса приложения. Он предоставляет дополнительную поддержку java 8, а также joda LocalDateTime.

Gradle зависимость: (преобразовать его в Maven, если вы используете Maven)

compile 'io.dropwizard.modules:dropwizard-java8-jdbi:0.7.1 '

и убедитесь, что вы импортировать io.dropwizard.java8.jdbi.DBIFactory на класс Applicaiton и использовать ее в перспективе.

public void run(T configuration, Environment environment) throws Exception { 
    final DBIFactory factory = new DBIFactory(); 
    final DBI jdbi = factory.build(environment, configuration.getDatabase(), "database"); 
    ... 
    ... 
} 
+0

Спасибо, я попробую. Единственная проблема заключается в том, что я использовал guava необязательно во всем приложении. До тех пор, пока dropwizard и JDBI полностью совместимы с java 8 optional, я не вижу в этом проблемы. – nckturner

+0

Я вижу. Затем вы можете просто скопировать код из решения java8 и изменить опцию в Guava. см. следующие два: https://github.com/dropwizard/dropwizard-java8/blob/master/dropwizard-java8-jdbi/src/main/java/io/dropwizard/java8/jdbi/DBIFactory.java https://github.com/dropwizard/dropwizard-java8/blob/master/dropwizard-java8-jdbi/src/main/java/io/dropwizard/java8/jdbi/args/OptionalArgumentFactory.java – Natan

+0

Будет ли это работать и для возвращаемых значений запроса? –