I have separated the subUser process into two parts:
For the first part, I am using a multi-threaded environment with a new transaction. This transaction is only used for fetching the data, so a rollback is not required.
In the second part, the process is completed within the original user process method. This ensures that if any error occurs, the transaction for both the subUser and the parent user is rolled back entirely.