class AbstractDynamoDao extends AbstractDao<M,P,K,I> {

    @Override
    public M create(P partial, Instant createAt, I creatorId) {
        Item item = toCreateItem(partial, createAt, creatorId);
        PutItemSpec spec = new PutItemSpec()
                .withItem(item);
        if (getFieldData().getId() != null) {
            spec = spec.withConditionExpression("attribute_not_exists(#id)")
                    .withNameMap(new NameMap()
                                    .with("#id", getFieldData().getId().getStorageName())
                    );
        }
        M model = modelMapper.toObject(item);
        getTable().putItem(spec);
        return model;
    }

    public  AbstractDynamoDao(Class<M> modelClass, Class<P> partialClass, AmazonDynamoDB db, String tableName);
    public  AbstractDynamoDao(Class<M> modelClass, Class<P> partialClass, AmazonDynamoDB db, String tableName, ItemMapper<M> modelMapper, ItemMapper<P> partialMapper);

}