Hibernate gravando @ManyToOne null

22/09/2015

0

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)
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

Joao Araujo

Responder

Posts

22/09/2015

Eduardo Pessoa

Não seria o correto OnetoMany? Não tenho certeza.
Responder

22/09/2015

Robson Teixeira

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.

Grupo grupo=//chamada do método que efetua a busca do grupo 
subGrupo.setGrupo(grupo);
em.persist(subGrupo);


Att
Robson
Responder

22/09/2015

Eduardo Pessoa

Robson, aonde posso encontrar material que explique sobre o assunto, ManytoOne, OnetoMany...etc?
Responder

22/09/2015

Robson Teixeira

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
Responder

22/09/2015

Eduardo Pessoa

Vou procurar esses artigos, valeu.
Responder

23/09/2015

Joao Araujo

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.

@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();
            
        }
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar