An aggregate root is an entity that contains sub-entities, which must be stored atomically. In an order system, changes to OrderItems affect the total price of the Order. This ties into atomicity and transactions, which is why DDD advocates for a repository per aggregate root.
And I think it's important to mention that you'll need to keep your runtime instances of entities synced. This is a good idea not to let the developer create a new instance from sub-entities.
Note 1: A single entity can serve as an aggregate root without sub-entities.
Note 2: Sub-entities within an aggregate root should only be managed through the aggregate. Developers should not manipulate them directly from outside.