Tenho uma classe Usuario e outra Contato a qual possuem um relacionamento entre as mesmas. Esta tudo funcionando corretamente a questão que eu preciso que somente seja gravado um contato se houver algum atributo de contato preenchido, mas se o usuário preencher somente os atributos obrigatórios de usuário e descartar o preenchimento de contato preciso que na tabela usuário fique com NULL e não gerando um Contato apenas com seu ID.
Mapeamento do relacionamento.
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "contact_id")
private Contato contato;
provavelmente você esta instanciando o Contato em algum lugar.
Antes de fazer o save verifique se algum atributo de contato esta preenchido, caso não esteja set null em contato.
Quando eu chamo a exibição da tela eu preciso do: usuario.setContato(new Contato()); caso não faça ele apresenta erro de NULL ao gravar e não efetuar a gravação. Como eu faço este New ele volta e preenche o BD com o ID apenas do contato, sendo que na tela o usuário não preencheu nada.
Entao, antes de salvar faça:
public void save(Usuario usuario){
if(usuairo.getContato.getNumeroTelefone == null){
usuario.setContato(null);
}
//restante da logica.
}
A forma que fiz foi criar o metodo no objeto que retorna se ele esta preenchido.
public boolean isNaoPreenchido() {
if (StringUtils.isNotBlank(email)) {
return false;
}
if (StringUtils.isNotBlank(telefone)) {
return false;
}
if (StringUtils.isNotBlank(celular)) {
return false;
}
return true;
}