Hibernate gravando @ManyToOne null
Bom dia !
Não estou conseguindo gravar no banco de dados a tabela subgrupo, com a chave estrangeira grupo setando com null.
segue codigo da classe modelo (mapeamento da tabela do banco de dados)
Não estou conseguindo gravar no banco de dados a tabela subgrupo, com a chave estrangeira grupo setando com null.
segue codigo da classe modelo (mapeamento da tabela do banco de dados)
public class SubGrupo implements Serializable {
private static final long serialVersionUID = -5117050430686257801L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_SUBGRUPO")
public Long id;
@Column(name = "SUB_NOME")
public String nome;
@Column(name = "SUB_ATIVO")
public Long ativo;
@Column(name = "SUB_ENDERECOLOGO")
public String logo;
@ManyToOne
@JoinColumn(name = "ID_GRUPO", nullable= true )
public Grupo grupo ;
Joao Araujo
Curtidas 0
Respostas
Eduardo Pessoa
22/09/2015
Não seria o correto OnetoMany? Não tenho certeza.
GOSTEI 0
Robson Teixeira
22/09/2015
Boa Tarde,
Quando persistir o registro do SubGrupo o objeto deve ter também o registro do Grupo no qual o SubGrupo pertença.
Segue abaixo um trecho de exemplo.
Att
Robson
Quando persistir o registro do SubGrupo o objeto deve ter também o registro do Grupo no qual o SubGrupo pertença.
Segue abaixo um trecho de exemplo.
Grupo grupo=//chamada do método que efetua a busca do grupo subGrupo.setGrupo(grupo); em.persist(subGrupo);
Att
Robson
GOSTEI 0
Eduardo Pessoa
22/09/2015
Robson, aonde posso encontrar material que explique sobre o assunto, ManytoOne, OnetoMany...etc?
GOSTEI 0
Robson Teixeira
22/09/2015
Boa Tarde Eduardo,
Aqui mesmo na devmedia você encontra XD tanto nos artigos quanto os videos
Segue abaixo o link de um curso que contem as aulas que explica direitinho para ti
https://www.devmedia.com.br/curso/desvendando-o-jpa/139
Att
Robson
Aqui mesmo na devmedia você encontra XD tanto nos artigos quanto os videos
Segue abaixo o link de um curso que contem as aulas que explica direitinho para ti
https://www.devmedia.com.br/curso/desvendando-o-jpa/139
Att
Robson
GOSTEI 0
Eduardo Pessoa
22/09/2015
Vou procurar esses artigos, valeu.
GOSTEI 0
Joao Araujo
22/09/2015
Alterei a classe modelo da tabela SUBGRUPO e adicione algumas informações referente @manyToOne, agora o sistema esta gravado mesmo eu não informando o chave estrangeira GRUPO. porem verifique que no banco ao passar null o sistema grava uma novo GRUPO e amarra ao SUBGRUPO gravado, dessa forma ainda não conseguir gravar com a chave estrangeira null no banco.
Classe controle (recebe as informações)
Classe SubGrupoService ( valida as informações)
Classe SubGrupoDAO ( persiste as informações)
@ManyToOne ( optional= true , cascade = CascadeType.ALL) @JoinColumn(name = "ID_GRUPO", nullable= true ) public Grupo grupo = new Grupo();
Classe controle (recebe as informações)
@Override
public void Gravar() {
subgrupo = new SubGrupo();
subgrupo.setNome(txtNome.getText());
Long ativo;
if (rbSim.isSelected()) {
ativo = 0L;
} else {
ativo = 1L;
}
subgrupo.setAtivo(ativo);
subgrupo.setLogo(txtEnderecoIMG.getText());
//recebendo chave strangeira
grupo = new Grupo();
grupo.setId(txtGrupoId.getText().trim().isEmpty() ? null :Long.valueOf(txtGrupoId.getText()) );
//grupo.setId(null);
subgrupo.setGrupo(grupo);
try {
new SubGrupoService().gravar(subgrupo);
Limpar();
BotaoAcao();
} catch (Exception e) {
String erro = e.toString();
alert.erro(""+erro.substring(40));
}
}Classe SubGrupoService ( valida as informações)
public class SubGrupoService {
AlertDialog alert = new AlertDialog();
@Transactional
public void gravar(SubGrupo subGrupo) throws NegocioException {
String erro = "";
boolean nomeOk = false;
//print
System.out.println("Insert subgrupo");
System.out.println("nome: " + subGrupo.getNome());
System.out.println("logo: " + subGrupo.getLogo());
System.out.println("grupo: " + subGrupo.getGrupo().getId());
System.out.println("ativo: " + subGrupo.getAtivo());
if (subGrupo.getNome().trim().isEmpty() || subGrupo.getNome() == null) {
erro = erro + "Nome é obrigatório!\n";
nomeOk = false;
} else {
nomeOk = true;
}
if (nomeOk) {
try {
new SubGrupoDAO<SubGrupo>().salvar(subGrupo);
alert.informacao("Gravado com sucesso! ID:"+subGrupo.getId());
} catch (Exception e) {
alert.alerta("Erro ao gravar "+e.toString());
System.out.println(e);
}
} else {
throw new NegocioException("" + erro);
}
}
Classe SubGrupoDAO ( persiste as informações)
public class SubGrupoDAO <T> {
AlertDialog alert = new AlertDialog();
private final AcessoBanco acessoBanco;
protected EntityManager em;
public SubGrupoDAO() {
acessoBanco = new AcessoBanco();
}
protected void abreConexao() {
try {
em = acessoBanco.conexaoRetaguarda();
} catch (Exception ex) {
alert.erro("Ocorreu um erro ao conectar ao banco de dados.\n" + ex.getMessage() + "\n" + ex.getCause().getMessage());
}
}
protected void fechaConexao() {
try {
acessoBanco.desconectarRetaguarda();
} catch (Exception ex) {
alert.erro( "Ocorreu um erro ao confirmar a transação no banco de dados.\n" + ex+ "\n" );
}
}
public void salvar(T bean) throws Exception {
abreConexao();
em.persist(bean);
fechaConexao();
}GOSTEI 0