[Resolvido]Hibernate setando valores em tabelas relacionadas

Fala galera blz?

Ja procurei em diversos lugares, porém não encontrei a solução.

Possuo 2 classes, Cliente e Cep onde todo cliente possui um Cep. Portanto existem duas tabelas no banco.

Insiro dados nas duas tabelas através de uma mesma view, porém o campo cep_id (campo relacionado ao id da tabela Cep) da tabela Cliente fica como NULL.

Para inserir os dados estou usando hibernate, estou usando vRaptor3 também.

public void salva(Cliente cliente, Cep cep) {
   session.save(cep);
   session.save(cliente);
}

Seguem as classes:

Cliente:

public class Cliente {

	@Id @GeneratedValue
	private Long id;
	
	private String nome;
	
	@OneToOne
	private Cep cep;
	private String pessoa;
	private String cgc;
	private String rg;
	private String fone;
	private String fax;
	private String email;
	private String replegal;
	private String grupo;

	//getters e setters
}

Cep:

public class Cep{

	@Id @GeneratedValue
	private Long id;
	private String cep;
	private String endereco;
	private String bairro;
	private String cidade;
	private String uf;

	//getters e setters
}

Existe alguma forma de inserir o id criado na tabela Cep no campo cep_id da tabela Cliente?

Tentei fazer alguns tratamentos para isso mas não deu certo, como por exemplo, pegar o ultimo Id gravado na tabela Cep e gravar no campo cep_id da tabela Cliente,
porém para setar um valor é necessário setar um Cep e não um Long.

Não sei se fui claro na dúvida, mas desde já obrigado a todos!

Porque você não cria todos os atributos da TB_Cep na TB_Cliente?

Todo Cliente vai ter todos os atributos da tabela CEP certo?

Isso que você está tentando fazer, pelo que vi, faz parte dos paradigmas de orientação a objeto! Herança pra ser mais preciso…
Onde por exemplo, tenho duas classes: funcionário & gerente (todo gerente, é um funcionário, logo herdará todos os atributos da classe funcionário. Mas nem todo funcionário é um gerente… então há atributos específicos na classe gerente que não pertencem a classe funcionario)

No início você falou "Possuo 2 classes, Cliente e Cep onde todo cliente possui um Cep, Portanto existem duas tabelas no banco."
Seguindo sua lógica, você vai ter que criar uma tabela para Nome, pois todo Cliente possui um Nome, outra tabela para Endereço, pois cada Cliente, também possui um Endereço e assim sucessivamente…

Espero ter ajudado em alguma coisa!
Abraço

leonardo.bilar, onde no seu código você relaciona o objeto cep ao objeto cliente?

Como o hibernate vai saber qual cep deve gravar para aquele cliente?
Talvez antes de chegar no método salvar, você esteja fazendo essa associação, mas se não for o caso seu método deveria ter algo assim:

  public void salva(Cliente cliente, Cep cep) {
    session.save(cep);
    cliente.setCep(cep);
    session.save(cliente);
  }  

Claro que aí não seria o melhor lugar para esta associação, mas com isso ele preencherá o id do cep.

leonardo.bilar, há um pequeno problema na sua conclusão: o meu nome é apenas meu (ou quase), enquanto um cep é sempre compartilhado por um grupo de endereços (uma rua, parte de uma avenida, etc).

O cep existe independente de existir alguém morando ali, é algo separado da pessoa.

Seria possível ele alimentar, por exemplo, os ceps com a base de dados dos correios… você duplicaria informação armazenando junto com a Pessoa.

O conceito que ele usou nesse caso não é a herança, foi apenas composição.
No fim das contas, um objeto acaba sendo formado pela composição de outros objetos (Dates, Strings) e, no java, tipos primitivos.

Neste caso da Pessoal, na minha opinião, o ideal seria ela realmente ter um objeto Endereço e não Cep.
O objeto endereço conteria o cep, o número e um complemento pelo menos.

Se o endereço em si será gravado em uma terceira tabela endereço, aí já é uma outra história.
(Também não veria necessidade, já que o endereço é mais ou menos único também).

Não precisamos fazer sempre equivalência de um para um entre classes e tabelas.

AbelBueno o metodo salva funcionou certinho do jeito que vc colocou.
Eu me matando aqui varios dias pra encontrar uma forma e acabei não pensando no óbvio.

vitorgp.ti vc pensou numa lógica diferente, mas é algo que faz sentido.
Não cheguei a testar, pois s solução do AbelBueno resolveu a situação.

Muito obrigado pela ajuda de vcs!
Valeu!