Olá!
Vc quer usar relacionamento entre cliente e endereço? Se quiser pode fazer um @OneToMany entre cliente e endereço. O que fica diferente é a forma de persistir isso, se for aplicação web vc poderia usar o VRaptor 3 e o form ficaria assim:
<form action="cliente/adiciona" method="post">
<li><label for="nome">Nome</label>
<div><input name="cliente.nome" type="text" maxlength="40" />
</div>
</li>
<li><label for="endereco">Endereço</label>
<div><input name="enderecos.nome" type="text" maxlength="255" />
</div>
</li>
<input type="submit" value="Enviar" />
A classe Cliente ficaria assim:
@Entity
public class Cliente {
//outros atributos para cliente, data de nascimento, cpf, rg, etc
@OneToMany(targetEntity=Enderecos.class ,cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "cliente",orphanRemoval=true)
private List<Enderecos> enderecos;
// getters, setters, construtor vazio e construtor preenchido
}
Classe Enderecos:
@Entity
public class Enderecos {
// outros atributos que desejar
@ManyToOne
private Cliente cliente;
// getters, setters, construtor vazio e construtor preenchido
}
Na hora de gravar, vc terá um método adiciona no ClienteController:
public void adiciona(final Cliente cliente, final Enderecos enderecos) {
validator.checking(new Validations() {
{
that(!cliente.getNome().isEmpty(), "cliente.nome",
"clienteNome.obrigatorio");
that(!enderecos.getEndereco().isEmpty(),
"cliente.endereco", "enderecoCliente.obrigatorio");
}
});
// Direcionando para o formulario em caso de erro
validator.onErrorUse(Results.logic()).redirectTo(ClienteController.class).formulario();
// Associando endereço com o cliente
enderecos.setCliente(cliente);
// Adicionando o cliente e o endereço
clienteDAO.adiciona(contato, enderecos);
// Retornando mensagem de sucesso na inclusão
result.include("mensagem", "Cliente adicionado com sucesso.");
}
Na classe ClienteDAO vc teria:
public void adiciona(Cliente cliente, Enderecos enderecos) {
Transaction tx = session.beginTransaction();
session.save(cliente);
session.save(enderecos);
tx.commit();
}
Abraço!