nck*_*ner 5 java jdbi dropwizard
jDBI查询是否可以具有可选(空)参数?我试图让可选参数在数据库查询中工作。我正在与dropwizard合作。
@SqlQuery("SELECT * \n" +
"FROM posts \n" +
"WHERE (:authorId IS NULL OR :authorId = author_id)")
public List<Post> findAll(@Bind("authorId") Optional<Long> authorId);
Run Code Online (Sandbox Code Playgroud)
传递authorId时,该查询有效,但为NULL时会出现此错误:
org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1
Run Code Online (Sandbox Code Playgroud)
这是我从以下位置拨打的资源路线:
@GET
public ArrayList<Post> getPosts(@QueryParam("authorId") Long authorId)
{
return (ArrayList<Post>)postDao.findAll(Optional.fromNullable(authorId));
}
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,这是可以做到的,所以我猜我正在丢失某些东西或有明显的错误。任何帮助将不胜感激!
仅供参考-我也尝试了不使用番石榴可选(dropwizard支持)的方法-只是将authorId发送为null的Long。只要它不为null,它也可以工作。
您需要DBIFactory
在应用程序类上使用java8版本。它提供了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");
...
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3411 次 |
最近记录: |