Orm 未设置Ebean/IDI参数

Orm 未设置Ebean/IDI参数,orm,playframework-2.0,ebean,Orm,Playframework 2.0,Ebean,我和埃宾有个奇怪的问题 代码: 我不明白为什么tfzIds列表没有被插入到EBean构建的查询中 我尝试的是:我将强制转换添加到long,以确保列表中不会出现空值。但这似乎不是问题所在,列表似乎根本没有被读取。发生异常是因为行为空。。。我很惊讶埃宾没有检查。我通过断言rowshasNext()作为该方法的第一个语句来解决这个问题,从而引发了一个更有用的异常。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@pktangyue:为什么不?“我问了这个问题,所以肯定,我必须知道

我和埃宾有个奇怪的问题

代码:

我不明白为什么tfzIds列表没有被插入到EBean构建的查询中


我尝试的是:我将强制转换添加到long,以确保列表中不会出现空值。但这似乎不是问题所在,列表似乎根本没有被读取。

发生异常是因为
为空。。。我很惊讶埃宾没有检查。我通过断言rows
hasNext()
作为该方法的第一个语句来解决这个问题,从而引发了一个更有用的异常。

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@pktangyue:为什么不?“我问了这个问题,所以肯定,我必须知道吗?”JanusTroelsen非常感谢,这让我发疯,我在其他地方搜索。我把这叫做埃宾虫。
static <T> ImmutableMap<Long, T> getFromIdToItemMap(Iterable<SqlRow> rows, 
        Callable<Model.Finder<Long, T>> getFinder, 
        String idSqlFieldName, 
        Function<T, Long> getId) {
    List<Long> tfzIds = Lists.newArrayList();
    for (SqlRow i : rows) {
        tfzIds.add((long) i.getLong(idSqlFieldName));
    }
    Builder<Long, T> id_to_tfz = new ImmutableMap.Builder<Long, T>();
    List<T> tfzs;
    try {
        tfzs = getFinder.call().where().idIn(tfzIds).findList();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    for (T tfz : tfzs) {
        id_to_tfz.put(getId.apply(tfz), tfz);
    }
    return id_to_tfz.build();
}
javax.persistence.PersistenceException: Query threw SQLException:Parameter "#1" is not set; SQL statement:
select t0.virtuelle_adresse c0, t0.reale_adresse c1, t0.betr_nr c2, t0.bemerkung c3, t0.inbetriebnahme c4, t0.dekoder_typ_id c5, t0.model_tfz_typ_id c6, t0.eigentuemer_id c7 
from tfz t0 
where t0.virtuelle_adresse in (?)  [90012-168] 
Bind values:[] 
Query was:
select t0.virtuelle_adresse c0, t0.reale_adresse c1, t0.betr_nr c2, t0.bemerkung c3, t0.inbetriebnahme c4, t0.dekoder_typ_id c5, t0.model_tfz_typ_id c6, t0.eigentuemer_id c7 
from tfz t0 
where t0.virtuelle_adresse in (?)  


    at com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:815)
    at com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:795)
    at com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:210)
    at com.avaje.ebeaninternal.server.query.DefaultOrmQueryEngine.findMany(DefaultOrmQueryEngine.java:77)
    at com.avaje.ebeaninternal.server.core.OrmQueryRequest.findList(OrmQueryRequest.java:272)
    at com.avaje.ebeaninternal.server.core.DefaultServer.findList(DefaultServer.java:1502)
    at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.findList(DefaultOrmQuery.java:904)
    at com.avaje.ebeaninternal.util.DefaultExpressionList.findList(DefaultExpressionList.java:177)
    at controllers.Prognosis.getFromIdToItemMap(Prognosis.java:106)
    ... 26 more
Caused by: org.h2.jdbc.JdbcSQLException: Parameter "#1" is not set; SQL statement:
select t0.virtuelle_adresse c0, t0.reale_adresse c1, t0.betr_nr c2, t0.bemerkung c3, t0.inbetriebnahme c4, t0.dekoder_typ_id c5, t0.model_tfz_typ_id c6, t0.eigentuemer_id c7 
from tfz t0 
where t0.virtuelle_adresse in (?)  [90012-168]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.expression.Parameter.checkSet(Parameter.java:73)
    at org.h2.command.Prepared.checkParameters(Prepared.java:163)
    at org.h2.command.CommandContainer.query(CommandContainer.java:85)
    at org.h2.command.Command.executeQuery(Command.java:191)
    at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:109)
    at com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:172)
    at com.avaje.ebeaninternal.server.query.CQuery.prepareBindExecuteQuery(CQuery.java:382)
    at com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:174)
    ... 32 more