Bom dia gente,
estou com um problema na minha aplicação, não chega a ser grave, mas eu não estou conseguindo entender o problema,
eu tenho uma atributo da minha classe marcado como nullable=false, na hora que eu crio o banco de dados através do hibernate, devido ao atributo nullable=false, ele coloca esta propridedade como NOT NULL no banco de dados, até ai tudo bem.
Porém na hora que eu vou remover um registro deste banco de dados, com a logica do hibernate para usar o comando ‘delete’ eu preciso passar apenas o id, porem ele da o seguinte erro:
org.hibernate.PropertyValueException: not-null property references a null or transient value: br.salesianos.modelo.Inspetoria.ins_nome
ou seja, ele pede que eu mande o atributo ins_nome para que o hibernate permita deletar o arquivo, mas isso nao é necessario…
Ai fico sem entender esse comportamento do hibernate, até pensei em nao usar o atributo nullable=false, mas eu gostaria de usar o atributo pois ele marca o banco de dados com a propriedade NOT NULL que pra mim é util, pois se eu esquecer de fazer a validação na view(sei q isso é errado, mas foi a maneira mais facil q achei de fazer) o banco de dados vai validar pra mim e exibir um erro na tela.
Procurei inclusive na documentação do hibernate, mas não consegui achar uma solução pra minha duvida, caso alguém possa me explicar, ficarei mutio agradeico, t+
ps: se eu remover o nullable=false, consigo excluir normalmente o registro no banco de dados
Classe Inspetoria
@Entity
public class Inspetoria implements Serializable {
@Id
@SequenceGenerator(name="generator_inspetoria",sequenceName="sequence_inspetoria")
@GeneratedValue(generator="generator_inspetoria")
private Integer ins_id;
@ManyToOne
@ForeignKey(name="inspetoria_fkey_cidade_01")
@JoinColumn(name="cid_id")
private Cidade cidade;
@Column(length=100)
private String ins_sigla;
@Column(length=100, nullable=false )
private String ins_nome;
//setters e getters
Classe GravaInspetoria(apesar do nome, alem de gravar, ele tambem atualiza e exclui)
@ManagedBean
public class GravaInspetoria {
private Integer ins_id;
private Integer cid_id;
private String ins_sigla;
private String ins_nome;
Session sessao = CriadorDeSessaoNovo.getSession();
Transaction tx = sessao.beginTransaction();
public void limpante() {
this.ins_id = null;
this.cid_id = null;
this.ins_sigla = null;
this.ins_nome = null;
}
public void gravar() {
try {
Cidade obj_cidade = new Cidade();
obj_cidade.setCid_id(getCid_id());
Inspetoria obj_inspetoria = new Inspetoria();
if (getIns_id() != 0) {
obj_inspetoria.setIns_id(getIns_id());
}
obj_inspetoria.setIns_sigla(getIns_sigla().toUpperCase());
obj_inspetoria.setIns_nome(WordUtils.capitalizeFully(getIns_nome()));
obj_inspetoria.setCidade(obj_cidade);
sessao.saveOrUpdate(obj_inspetoria);
tx.commit();
sessao.close();
limpante();
FacesContext.getCurrentInstance().addMessage("FormInspetoria:gravar", new FacesMessage("Informações gravadas com sucesso!"));
obj_inspetoria = new Inspetoria();
} catch (Exception erro) {
System.out.println("Problema: " + erro);
tx.rollback();
sessao.close();
FacesContext.getCurrentInstance().addMessage("FormInspetoria:excluir", new FacesMessage("Falha ao gravar informações!"));
}
}
public void excluir() {
try {
Cidade obj_cidade = new Cidade();
obj_cidade.setCid_id(getCid_id());
Inspetoria obj_inspetoria = new Inspetoria();
obj_inspetoria.setIns_id(getIns_id());
sessao.delete(obj_inspetoria);
tx.commit();
sessao.close();
limpante();
FacesContext.getCurrentInstance().addMessage("FormInspetoria:excluir", new FacesMessage("Informações excluídas com sucesso!"));
} catch (Exception erro) {
System.out.println("Problema: " + erro);
tx.rollback();
sessao.close();
FacesContext.getCurrentInstance().addMessage("FormInspetoria:excluir", new FacesMessage("Falha ao excluir informações!"));
}
}