NullSavingStrategy.DO_NOT_SET relies on a protocol feature that transparently indicates to the server that any bound variable that is not present in the EXECUTE message should be considered "unset", see CASSANDRA-7304. The mapper uses this feature to be able to prepare one single statement per DAO method, and be able to execute that same prepared statement regardless of the fact that the actual bound variables can be null/unset.
This applies to bound variables, which means that, at least for queries that the mapper can generate automatically, it can only apply to columns in a table, not to UDTs or tuples.
However there might be a workaround: use a Query method and specify different bound variables to each UDT field you want to update:
Then use NullSavingStrategy.DO_NOT_SET as you normally would and each field will only be updated if the corresponding bound variable is non-null.
Document this in our mapper documentation.