jo_user
Novembro 13, 2018, 12:13am
#1
Boa noite a todos,
Estou estudando um livro sobre java, o livro aborda assuntos como hibernate, maven entre outros. Na parte que estou com problema, estou salvando uma lista de categoria (de forma recursiva) e que o primeiro item da lista possui alguns atributos nulos (trata-se do pai da hierarquia), segue abaixo a classe bean que faz a gravação:
Método que salva o bean.
Categoria despesas = new Categoria(null, usuario, “DESPESAS”, -1);
this.categoriaDAO.salvar(new Categoria(despesas, usuario, “Moradia”, -1));
despesas = this.categoriaDAO.salvar(despesas);
Parte do código da classe categoria
@Entity
public class Categoria implements Serializable {
@Id
@GeneratedValue
private Integer codigo;
@ManyToOne
@JoinColumn(name = "categoria_pai", nullable = true, foreignKey = @ForeignKey(name = "fk_categoria_categoria"))
private Categoria pai;
// construtor
public Categoria(Categoria pai, Usuario usuario, String descricao, int fator) {
this.pai = pai;
this.usuario = usuario;
this.descricao = descricao;
this.fator = fator;
}
… continua
o erro que aparece.
javax.servlet.ServletException: javax.servlet.ServletException: java.lang.NullPointerException
ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:43)
Obrigado a todos, não sei se consegui expressar corretamente o problema.
Seu erro está nesta linha!
Nullpointer, algo lá n está instanciado.
jo_user
Novembro 13, 2018, 12:33pm
#3
Bom dia Rodrigo,
Então, você tem razão, a primeira categoria que é salva, ela é gravada como nula (no livro descreve desta maneira), pois como se trata de uma tabela que faz referência a outra (da mesma tabela), a primeira categoria (categoria pai) não deve possui nenhuma categoria associada a ela, ela deve ser uma categoria nula.
Categoria despesas = new Categoria(null , usuario, “DESPESAS”, -1);
this.categoriaDAO.salvar(new Categoria(despesas, usuario, “Moradia”, -1));
jo_user
Novembro 14, 2018, 12:50am
#5
Boa noite, segue a classe para sua análise:
@Entity
public class Categoria implements Serializable {
/**
*
*/
private static final long serialVersionUID = -976344612708369070L;
@Id
@GeneratedValue
private Integer codigo;
@ManyToOne
@JoinColumn (name = “categoria_pai”, nullable = true, foreignKey = @ForeignKey (name = “fk_categoria_categoria”))
private Categoria pai;
@ManyToOne
@JoinColumn(name = "usuario", foreignKey = @ForeignKey(name = "fk_categoria_usuario"))
@OnDelete(action = OnDeleteAction.CASCADE)
private Usuario usuario;
private String descricao;
private int fator;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JoinColumn(name = "categoria_pai", updatable = false)
@org.hibernate.annotations.OrderBy(clause = "descrica asc")
private List<Categoria> filhos;
public Categoria() {
}
public Categoria(Categoria pai, Usuario usuario, String descricao, int fator) {
this.pai = pai;
this.usuario = usuario;
this.descricao = descricao;
this.fator = fator;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public Categoria getPai() {
return pai;
}
public void setPai(Categoria pai) {
this.pai = pai;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getFator() {
return fator;
}
public void setFator(int fator) {
this.fator = fator;
}
public List<Categoria> getFilhos() {
return filhos;
}
public void setFilhos(List<Categoria> filhos) {
this.filhos = filhos;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Categoria other = (Categoria) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}