Hi Lukas,
thanks for your response.
I already use your approach but with pojos and call it ...
// composition of jooq pojos
public class VerwaltungseinheitFullDto extends Verwaltungseinheit {
private Objekt objekt;
private Wirtschaftseinheit wirtschaftseinheit;
private Quartier quartier;
private Stadtteil stadtteil;
}
The problem is here how to efficiently map the database result set into
that composition class without manually handle every field/attribute ?
Sometimes I use org.modelmapper for that
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().addValueReader(new RecordValueReader());
modelMapper.getConfiguration().setSourceNameTokenizer(NameTokenizers.UNDERSCORE);
I put the value of the composition dto attribute name plus the underscore
as prefix for every field
var objektFields =
Arrays.asList(VERWALTUNGSEINHEIT.objekt().fields()).stream().map(field ->
field.as("objekt_" + field.getName())).toList();
and let the modelmapper do his job
var result = modelMapper.map(dbResult, VerwaltungseinheitFullDto.class);
But its quite slow and often I prefer the updateable records in order to
store() the record directly back ....
So I didn't found a way to map such DTO like yours. RecordMapper,
RecordHandler or something like this seems not appropriate at least in this
way:
.fetch(new RecordHandler<KalkulationPositionRecord, CompositionDto>() {
@Override
public CompositionDto map(KalkulationPositionRecord position) {
CompositionDto result = new CompositionDto();
result.setDbRecord(position);
return result;
}
});
But I'm quite sure, you have a way to map that without handle every field
manually... :-)
kind regards
Dominik
On Thursday, 6 April 2023 at 10:08:03 UTC+2 [email protected] wrote:
Thanks for your message.
A Record's row type isn't defined by the attributes it contains. Imagine if
that were the case, would we have to map to jOOQ's internal
org.jooq.impl.AbstractRecord.changed or other properties, for example? No,
an org.jooq.Record extends org.jooq.Fields, and thus defines exactly what
fields are contained in it. As such, you cannot extend generated records
and add more fields to them.
The idea looks hackish anyway. Why extend something that is well defined,
rather than use composition? Why not write:
public class MyDto {
// Or, whatever:
MyTableRecord theRecord;
int additionalAttribute1;
}
Doesn't that look much cleaner?
--
You received this message because you are subscribed to the Google Groups "jOOQ
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jooq-user/91dc608d-b584-417f-b33d-958b7d8a8ed2n%40googlegroups.com.