Hibernate gravando @ManyToOne null
22/09/2015
0
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
Posts
22/09/2015
Robson Teixeira
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
22/09/2015
Eduardo Pessoa
22/09/2015
Robson Teixeira
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
23/09/2015
Joao Araujo
@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(); }
Clique aqui para fazer login e interagir na Comunidade :)