luistiagos:
my god vc não precisa carregar objeto por objeto para persistir isto vem de uma combo provavelmente… no final vc ira apenas gravar no banco a fk do tipo de cada produto… vc não precisa e não deve carregar o objeto inteiro para persistilo no banco… e um tipo é vinculado a um unico produto… um produto não sera do tipo: limpesa e alimentação ao mesmo tempo correto?
o correto neste caso é:
Ler do banco o Produto perisistido com ID = id da alimentação e setar na entidade produto!
Precisa sim e deve fazer. Pelo menos até que isso se torne um problema de performance (te garanto que nao vai acontecer em 99,9% dos casos). Trabalhe com objetos, nao com dados. Use entidades, atributos, nao pense em chave primaria e chave estrangeira, exceto quando estiver fazendo o mapeamento.
Um produto, em qualquer que seja o problema levantado, em quaisquer que sejam os requisitos da aplicacao, jamais terá uma chave estrangeira. Voce ja ouviu um usuario dizendo que o produto sabao de coco Plim-Plim possui uma chave estrangeira para a categoria sabao?
Garanto que nao, ele diz que o sabao de coco Plim-Plim é um sabao, ou é da categoria sabao. Pense em objetos nao em dados. No caso mais simples o objeto Produto possui um atributo Categoria. Entao voce tem que informar a qual Categoria o Produto pertence e nao qual a chave estrangeira da Categoria que a Tabela produto deve ter. Continuando da forma simples, voce carrega os objetos Categoria baseado nos criterios que voce precisa (todos se for o caso), popula o combo, como indicou o Luis, com as descricoes das categorias. Escolhe uma Categoria da lista, e nao um id, e atribui ao produto.
Quem é o responsavel pela busca da lista de categorias? Um repositorio de categorias.