Relacionamento entre objetos

Considere que eu tenha um obejto A que tenha como propriedade um objeto B que tenha como propriedade um objeto C e que esse tenhas como propriedades os objetos D e E. No momento em que eu preencha os valores do objeto A e esses valores vem do banco de dados, eu tenho que carregar também os valores dos outros objetos (B, C, D e E)?

Ajudaria saber se você está usando (ou considerando) alguma ferramenta de mapeamento objeto-relacional como o Hibernate ou o Toplink.

Existem basicamente duas abordagens para este tipo de problema: carregar todo o grafo de objetos (ou seja, trazer a o objeto raiz e todas as referências que ele tem, recursivamente) ou fazer lazy loading. Com lazy loading, você traz o objeto do banco sem preencher as referências, mas quando alguém tenta usar uma delas (A.getB() por exemplo) o seu objeto carrega os dados do banco. É claro que se pode fazer diversas combinações dessas estratégias; uma comum é trazer do banco as referências diretas e fazer lazy loading das coleções.

Se você estiver usando JDBC diretamente, precisará codificar estes acessos todos, tipo:

public class A {
  private B b;

  public B getB() {
    if (null == b) 
      b = getDao().getBforA(this);
    return b;
  }
}

Se estiver usando um framework de persistência, basta configurar os mapeamentos da maneira desejada.

AllMighty, obrigado pela participação.

Bom, na verdade não estou usando nenhuma ferramenta para persistência. A principio também não será utilizado.

Sei que esse é um forum de Java, mas isso será aplicado em C#. E que tenho feito algumas pesquisaas e esse forum é muito bom. Tentar conversar sobre OO em forum de Delphi ou C# é um tormento.

Você poderia me indicar onde posso pesquisar sobre lazy loading?

http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Fowler/dp/0321127420

Recomendo muito este livro (não preciso dizer que os padrões são language agnostic).
Agora não me recordo de nenhum material específico na web.