可选的jDBI参数

时间:2014-10-29 18:37:48

标签: java dropwizard jdbi

是否可以在jDBI查询中使用可选(null)参数?我试图在数据库查询中获取可选参数。我正在使用dropwizard。

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

从我读过的内容来看,这是可能的,所以我猜测我错过了什么或者有明显的错误。任何帮助将不胜感激!

仅供参考 - 我也尝试过没有guava可选项(由dropwizard支持) - 只需将authorId作为Long发送为null。只要它不为空,这也有效。

1 个答案:

答案 0 :(得分:5)

您需要在应用程序类上使用java DBIFactory版本。它提供了java 8可选支持以及joda LocalDateTime。

Gradle依赖:(如果您正在使用maven,则将其转换为maven)

compile 'io.dropwizard.modules:dropwizard-java8-jdbi:0.7.1&#39;

并确保在Applicaiton类上导入io.dropwizard.java8.jdbi.DBIFactory并在运行时使用它。

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