首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为JDBI注册可选

为JDBI注册可选
EN

Stack Overflow用户
提问于 2015-07-13 23:40:23
回答 2查看 3.4K关注 0票数 2

我发现了一个No container builder available for com.google.common.base.Optional错误。

下面是一个更完整的堆栈跟踪:

代码语言:javascript
复制
java.lang.IllegalStateException: No container builder available for com.google.common.base.Optional
    at     org.skife.jdbi.v2.ContainerFactoryRegistry.createBuilderFor(ContainerFactoryRegistry.java:75)
    at org.skife.jdbi.v2.Query.first(Query.java:271)
    at     org.skife.jdbi.v2.sqlobject.ResultReturnThing$SingleValueResultReturnThing.result(ResultReturnThing.java:112)
    at org.skife.jdbi.v2.sqlobject.ResultReturnThing.map(ResultReturnThing.java:48)
    at org.skife.jdbi.v2.sqlobject.QueryHandler.invoke(QueryHandler.java:45)
    at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:175)
    at org.skife.jdbi.v2.sqlobject.SqlObject$1.intercept(SqlObject.java:75)
    at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$b270edb1.select(<generated>)

我有一个DAO,它的界面如下:

代码语言:javascript
复制
import com.google.common.base.Optional;

public interface MyDAO {
    @SqlQuery("something")
    Optional<Data> select();
}

以下是我的数据访问层单元测试:

代码语言:javascript
复制
public class MyDAOTest {
    @Test
    public void shouldSelect() {
        DBI dbi = new DBI("jdbc:(something)", "something", "something");
        MyDAO myDAO = dbi.onDemand(MyDAO.class);
        Optional<Data> data = myDAO.select();
        assertFalse(data.absent());
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-13 23:40:23

如果您使用的是io.dropwizard.jdbi.OptionalContainerFactory,请注册com.google.common.base.Optional并获取错误No container builder available for com.google.common.base.Optional

如果您使用的是io.dropwizard.java8.jdbi.OptionalContainerFactory,请注册java.util.Optional并获取错误No container builder available for java.util.Optional

我遵循了这里的指令

代码语言:javascript
复制
public class MyDAOTest {
@Test
public void shouldSelect() {
    DBI dbi = new DBI("jdbc:(something)", "something", "something");
    dbi.registerContainerFactory(new OptionalContainerFactory());
    ...
}
票数 8
EN

Stack Overflow用户

发布于 2016-03-21 23:07:52

确保在测试代码中创建了一个新的io.dropwizard.java8.jdbi.DBIFactory,而不是io.dropwizard.jdbi.DBIFactory。不幸的是,它们有着相同的名称,而且(根据我的经验)很容易在进口中被忽略。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31395271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档