Corma doesn't automatically do any lazy loading. This is by design, the main performance killer of most ORM libraries is lazy loading. Implementing lazy loading however is not hard. First inject the ObjectManager as a dependency into your data objects in your repository.

class MyObjectRepository extends ObjectRepository 
{

public function __construct(Connection $db, EventDispatcherInterface $dispatcher, ObjectMapper $objectMapper, CacheProvider $cache)
{
    parent::__construct($db, $dispatcher, $objectMapper, $cache);
    $this->objectDependencies = [$objectMapper];
}

And in your data object:

class MyObject extends DataObject 
{

/** @var AssociatedObject **/
protected $associatedObject;

protected $associatedObjectId;

/** @var ObjectMapper **/
private $orm;

public function __construct(ObjectMapper $orm)
{
    $this->orm = $orm;
}

/**
* @return AssociatedObject
*/
public function getAssociatedObject()
{
    if($this->associatedObject) {
        return $this->associatedObject;
    }

    return this->associatedObject = $this->orm->find(AssociatedObject::class, $this->associatedObjectId);
}
//...

Loading a many-to-one relationship would be similar, using findBy() instead of find().


/**
* @return AssociatedObject[]
*/
public function getAssociatedObjects()
{
    if($this->associatedObjects) {
        return $this->associatedObjects;
    }

    return this->associatedObjects = $this->orm->findBy(AssociatedObject::class, ['myObjectId'=>$this->id]);
}