PostgreSQL - como buscar um objeto que possua outros dentro dele

Olá pessoal,
o meu caso é o seguinte (simplificando)
eu tenho as seguintes tabelas no banco:

CONTRATOS

  • id
  • nome

ORDENS_DE_SERVIÇO

  • id
  • id_contrato
  • nome

CENTROS_DE CUSTO

  • id
  • id_ordem
  • nome

e na hora de buscar um objeto da classe Contrato eu preciso que ele venha com um vetor de OrdemDeServico (que por sua vez vem com um vetor de CentroDeCusto)…

considerando que:

  • eu preciso buscar um List (ou Vector) de Contratos numa busca;
  • não posso fazer outra busca entre a construção de contrato e outro (pra popular o Vector das Ordens do Contrato) pq senão fecha o ResultSet dos Contratos;

qual seria a melhor saída pra fazer um Factory retornando o Contrato da maneira que eu preciso?

  • guardar os contratos e depois adicionar o vetor de OrdemDeServico e depois pra cada OrdemDeServico adicionar o vetor de CentroDeCusto?
  • fazer um sql que retorne tudo junto agrupado por Contrato e depois por OrdemDeServico? (nesse caso como seria esse query?)

obrigado pela atenção!

Se estiver usando Hibernate, é mais fácil do que tu pensas.
Está? Ou tá fazendo SQL no braço?

na mão.

inclusive tava pensando:
que ficaria melhor fazer o vetor de contratos, aí pegar cada contrato e fazer o vetor de ordens e depois cada ordem pra fazer o vetor dela de centros de custo…só que aí seriam:

  • 01 consulta pra montar o vetor de contratos com X contratos;
  • X consultas pra montar o vetores de ordens de serviço pra cada contrato (pegando Y ordens)
  • e Y consultas pra montar cada um dos vetores de centros de custo pra cada ordem (pegando Z centros)

pois acho q usar left join pra fazer uma consulta só ao banco pode ser um tiro no pé dependendo da quantidade de linhas nas tabelas…pra pegar tudo isso num sql com left join o ResultSet viria com X.Y.Z linhas (o q pode ser MUITO grande)