0
我对Ebean有一个奇怪的问题。Ebean/idIn参数未设置
代码:
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
我不明白是怎么tfzIds名单没有得到插入到EBean建查询。
我试过了:我把演员加了很长时间以确保我不会在列表中找到空位。但是,这似乎并不是问题,看起来这份清单并没有被读取。
这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – pktangyue 2013-03-22 10:30:05
@pktangyue:为什么不呢?我问了这个问题,我肯定知道吗? – 2013-05-19 21:48:06
@JanusTroelsen非常感谢,这让我发疯,到处寻找其他地方。我会称这是一个Ebean错误。 – Bachi 2013-10-25 20:35:25