arnaudroger/SimpleFlatMapper

SelectQueryMapper should support LocalDate

Closed this issue · 8 comments

Having a simple SQL:

		SelectSeekStep1<Record4<Long, LocalDate, String, BigDecimal>, LocalDate> sql1 = dsl
				.select(booking.ID, booking.BOOKING_DATE, booking.NAME, booking.VALUE)//
				.from(booking)//
				.orderBy(booking.BOOKING_DATE.desc());
		JdbcMapper<Booking> testMapper = JdbcMapperFactory.newInstance()
				.newMapper(Booking.class);		

does deliver results with filled booking_date field, whereas

		SelectQueryMapper<Booking> mapper = SelectQueryMapperFactory.newInstance().newMapper(Booking.class);

delivers an empty field.

will have a look thanks for the report

that should be fixed in 8.2.2

I have upgraded now, but stuck in a case #658 we had in 2019 ;) with this inheritance strategy.

The following lines do not compile anymore:

JdbcMapper<TopicOverviewItem> mapper2 = JdbcMapperFactory.newInstance()
                        .discriminator(BaseTestPlan.class, builder -> builder.when(rs -> true, DwhTestPlan.class))
                        .newMapper(TopicOverviewItem.class);

I already replaced rs -> true with rs -> ConstantPredicate.truePredicate() while eclipse then shows me:

The method when(Function<List<JdbcColumnKey>,Predicate<ResultSet>>, Class<? extends BaseTestPlan>) is ambiguous for the type AbstractMapperFactory.DiscriminatorBuilder<ResultSet,JdbcColumnKey,BaseTestPlan>

Next try was with the compiling lines:

JdbcMapper<TopicOverviewItem> mapper2 = JdbcMapperFactory.newInstance()
                        .discriminator(BaseTestPlan.class).with(DwhTestPlan.class)
                        .newMapper(TopicOverviewItem.class);

which ends in a:

java.lang.ClassCastException: org.simpleflatmapper.reflect.ClassMetaWithDiscriminatorId cannot be cast to org.simpleflatmapper.reflect.meta.ClassMeta
	at org.simpleflatmapper.map.impl.DiscriminatorReflectionService.newClassMeta(DiscriminatorReflectionService.java:85)
	at org.simpleflatmapper.map.impl.DiscriminatorReflectionService.getClassMeta(DiscriminatorReflectionService.java:69)
	at org.simpleflatmapper.reflect.meta.PropertyMeta.newPropertyClassMeta(PropertyMeta.java:53)
	at org.simpleflatmapper.reflect.meta.PropertyMeta.getPropertyClassMeta(PropertyMeta.java:46)
	at org.simpleflatmapper.reflect.meta.ObjectPropertyFinder.lookForSubProperty(ObjectPropertyFinder.java:288)
	at org.simpleflatmapper.reflect.meta.ObjectPropertyFinder.lookForProperty(ObjectPropertyFinder.java:218)
	at org.simpleflatmapper.reflect.meta.ObjectPropertyFinder.lookForProperties(ObjectPropertyFinder.java:72)
	at org.simpleflatmapper.reflect.meta.PropertyFinder.lookForProperties(PropertyFinder.java:55)
	at org.simpleflatmapper.reflect.meta.PropertyFinder.findProperty(PropertyFinder.java:38)
	at org.simpleflatmapper.reflect.meta.PropertyFinder.findProperty(PropertyFinder.java:33)
	at org.simpleflatmapper.map.mapper.PropertyMappingsBuilder._addProperty(PropertyMappingsBuilder.java:97)
	at org.simpleflatmapper.map.mapper.PropertyMappingsBuilder.addProperty(PropertyMappingsBuilder.java:70)
	at org.simpleflatmapper.map.mapper.DefaultConstantSourceMapperBuilder.addMapping(DefaultConstantSourceMapperBuilder.java:147)
	at org.simpleflatmapper.map.mapper.SetRowMapperBuilderImpl.addMapping(SetRowMapperBuilderImpl.java:213)
	at org.simpleflatmapper.map.mapper.MapperBuilder.addMapping(MapperBuilder.java:142)
	at org.simpleflatmapper.map.mapper.MapperBuilder.addMapping(MapperBuilder.java:152)
	at org.simpleflatmapper.jdbc.JdbcMapperFactory$SetRowMapperFactory.newInstance(JdbcMapperFactory.java:351)
	at org.simpleflatmapper.jdbc.JdbcMapperFactory$SetRowMapperFactory.newInstance(JdbcMapperFactory.java:339)
	at org.simpleflatmapper.map.mapper.DynamicSetRowMapper.getMapper(DynamicSetRowMapper.java:104)
	at org.simpleflatmapper.map.mapper.DynamicSetRowMapper.getMapperFromSet(DynamicSetRowMapper.java:94)
	at org.simpleflatmapper.map.mapper.DynamicSetRowMapper.stream(DynamicSetRowMapper.java:70)
	at org.simpleflatmapper.jdbc.JdbcMapperFactory$DynamicJdbcSetRowMapper.stream(JdbcMapperFactory.java:292)

I'll check that out.
looks like some generic erasure makes the call ambiguous usually can get around that by casting explictky the lamba to the targeted type.

I added #717 with what it should work with

Thanks I have a bit more time at the minute, so will have try that out

just pushed 8.2.3 to maven central - it should be available in the next 30 min.
the test from the PR is passing with that