multiple aggregate Root creation

i would like to know how multiple aggregate root are created , is it
using saga pattern or some other logic exists.
I have a handset aggregate root and simcard aggregate root. The id
from these aggregate should be part of subscription aggregate root .

business rule :
Phone number should be unique.
Handset serialNumber should be unique.
One subscription is associated with one handset
One handset is associated with 1 or more phone number.

Class Handset {
  String serialNumber
   Handset(UUID id,serialNumber){

Class SimCard{
   String phoneNumber
  SimCard(UUID id, String phoneNumber){
       this. phoneNumber= phoneNumber;


Class Subscription {
     UUID id
     UUID deviceid
     UUID simCardid

    Subscription (UUID id, UUID deviceid, UUID simCardid){
            This. Deviceid= deviceid;
             This. simCardid= simCardid;

Hi Steve,

this does sound like a saga, indeed. There is probably some business concept that covers the process of these entities being created, like an Order or Contract.

A perhaps simpler, but less "correct" alternative would be to create all aggregates within a single command handler. The risk is that you will end up with a lot of "what if this goes wrong, and what if..." logic. That kind of logic is what the saga is meant for. You will also be a lot less scalable, since this solution requires to have all aggregates on the same machine.

For the uniqueness of the phone numbers, consider using a non-event sourced repository that checks for uniqueness. You might even combine it with a factory.

Note that Axon doesn't have saga support out-of-the-box, yet. I'll try to get it in the 0.7 version.