business icon indicating copy to clipboard operation
business copied to clipboard

FluentAssembler overrides generated aggregate identity

Open Magador opened this issue 8 years ago • 4 comments

Suppose a Person aggregate and DTO :

public class Person extends BaseAggregateRoot<UUID> {
    @Identity(handler = UUIDHandler.class)
    private UUID id;
    private String name;
}
public class PersonDTO {
    private UUID id;
    private String name;
}

In a standard workflow, we would create a PersonDTO without id in a interface and send it to the server. The server would then merge it into a freshly created aggregate :

fluentAssembler.merge(personDTO).into(Person.class).fromFactory();

The default factory will create a UUID as identity with the IdentityService, but when the actual mapping will happen, the null value of the DTO's id will override the generated id of the aggregate.

One workaround is to call the identity service again after the merge.

Magador avatar Jun 26 '17 15:06 Magador

The best solution, I think, is to configure ModelMapper to ignore nulls:

modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());

I think that this behavior is highly desirable and should be the default. I will take this into account when making ModelMapper assemblers configurable in business framework 4.0.

adrienlauer avatar Jul 01 '17 18:07 adrienlauer

Apart from model mapper, can we add support for other mapping tools like dozer?

maneesh-innani avatar Aug 11 '18 08:08 maneesh-innani

Probably we want also to integrate one example , showing directly working with UML stereotypes, like in enterprise architect?

maneesh-innani avatar Aug 11 '18 08:08 maneesh-innani

ModelMapper was refactored as an add-on (https://search.maven.org/artifact/org.seedstack.addons.modelmapper/modelmapper/1.0.0/jar) so the same can be done for Dozer, quite easily.

I'm not having much time to work on this but if you have some time to contribute it, I would be delighted. I can setup the repository and the release process for the new add-on if you want to start on this.

adrienlauer avatar Aug 27 '18 11:08 adrienlauer