public EntityReader(DatabaseContext dbCtx, EntityMapper<T> entityMapper, String constraintTable) {
// The postgres jdbc driver doesn't appear to allow concurrent result
// sets on the same connection so only the last opened result set may be
// streamed. The rest of the result sets must be persisted first.
entityReader = new PersistentIterator<T>(
new SingleClassObjectSerializationFactory(entityMapper.getEntityClass()),
new EntityTableReader<T>(dbCtx, entityMapper, constraintTable),
"nod",
true
);
entityTagReader = new PeekableIterator<DbFeature<Tag>>(
new PersistentIterator<DbFeature<Tag>>(
new SingleClassObjectSerializationFactory(DbFeature.class),
new EntityFeatureTableReader<Tag, DbFeature<Tag>>(
dbCtx, new TagMapper(entityMapper.getEntityName()), constraintTable),
"enttag",
true
)