Hibernate validator - InvalidStateException

8 respostas
J

olá pessoal,

estou tentando usar este framework…
adicionei os jars deste na minha aplicação, tenho q fazer algo mais pra começar a usar?
coloquei a anotação @NotNull no atributo da minha classe e qdo executo dá InvalidStateException…
o q estou fazendo de errado?

8 Respostas

J

copiei o DefaultValidatorMessages.properties no pacote padrão do meu projeto(uso NetBeans),
instanciei o ClassValidator, chamei o getInvalidValues…

eu to viajando? é por aí mesmo? e o q faço pra resolver o erro em questão?

estou seguindo o tutorial do hibernate.org, mas estou com dificuldades… alguém pra dar uma força?

J

pq não me mostra a mensagem?

@Min(value=1, message=“minimo 1”)
private int codigo;

M

Post aqui sua classe e sua view, para poder te auxiliar melhor.

Valew.

J

oi, Marcelo, aí vai...
valeu!
PS: estou usando genesis tb, algumas anotações são dele...

public class MarcaDao extends Dao<Marca> {

        //private static final ClassValidator marcaValidator = new ClassValidator( Marca.class,ResourceBundle.getBundle("messages", Locale.ENGLISH) );
        private static final ClassValidator marcaValidator = new ClassValidator( Marca.class);
        
	public MarcaDao(Session session) {
		// Pega todos genericos.
		super(session, Marca.class);
        }
        
        public void gravar(Marca marca) throws HibernateException {
            InvalidValue[] validationMessages = marcaValidator.getInvalidValues(marca);

            this.getSession().beginTransaction();
            super.salva(marca);
            this.getSession().getTransaction().commit();
        }
        
        public void alterar(Marca marca) throws HibernateException {
            InvalidValue[] validationMessages = marcaValidator.getInvalidValues(marca);
            this.getSession().beginTransaction();
            super.altera(marca);
            this.getSession().getTransaction().commit();
        }
        
        public void excluir(Marca marca) throws HibernateException {
            marca = pesquisar(marca.getCodigo());
            if (marca != null) {
                this.getSession().beginTransaction();
                super.deleta(marca);
                this.getSession().getTransaction().commit();
            } 
        }
        
        public Marca pesquisar(int codigo) throws HibernateException {
            this.getSession().beginTransaction();
            Criteria criteria = this.getSession().createCriteria(Marca.class);
            criteria.add(Restrictions.eq("codigo",codigo));
            Marca marca = (Marca) criteria.uniqueResult();
            this.getSession().getTransaction().commit();
            return marca;
        }
}
@Form
@Entity
public class Marca implements Serializable, Navegavel {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id_marca;
    
    @NotNull
    @Min(value=1, message="minimo 1")
    private int codigo;
    
    @NotNull(message="não pode ser nulo!")
    private String descricao;
    
    /** Creates a new instance of Marca */
    
    public Marca(int codigo, String descricao) {
        setCodigo(codigo);
        setDescricao(descricao);
    }
    
    public Marca() {
    }
    
    public Long getId_marca() {
        return this.id_marca;
    }
   
    public void setId_marca(Long id) {
        this.id_marca = id;
    }
    
    
    public int getCodigo() {
        return codigo;
    }
    
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    
    public String getDescricao() {
        return descricao;
    }
    
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    
    @Action
    public void limpar() {
        setCodigo(0);
        setDescricao(null);
    }
     
    @Action 
    public void gravar() {
        Session session = HibernateUtil.getCurrentSession();
        MarcaDao marcaDao = new MarcaDao(session);
        try {
            if (marcaDao.pesquisar(getCodigo()) == null) {  
                marcaDao.gravar(this);
                MsgUtils.showGravadoSucesso();
            } else {
                 if (MsgUtils.showMsgConfirmaAlteracao()) {
                    setId_marca(marcaDao.pesquisar(getCodigo()).getId_marca());
                    marcaDao.alterar(this);
                    MsgUtils.showMsgAlteracaoSucesso();
                 }
            }
        } catch (HibernateException ex) {
            HibernateUtil.getCurrentSession().getTransaction().rollback();
            MsgUtils.showError(ex.getMessage(1));
        } finally {
            HibernateUtil.closeCurrentSession();
        }
        limpar();
    }
J

essa é uma parte dos erros q dá…

org.hibernate.validator.InvalidStateException: validation failed for: net.cpadi.model.Marca at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:148) at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172) at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:119) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:42) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)

J

desculpa,
aí vai a view...

public FrmMarca() {
        initComponents();
        setExtendedState(MAXIMIZED_BOTH);
        
        //Cria uma instancia de marca
        Marca marca = new Marca();
        
        //adiciona o rodapé
        NavegadorRodape rodape = new NavegadorRodape();
        paneRodape.add(rodape);
        
        //adiciona o cabeçalho
        Cabecalho cabecalho = new Cabecalho("Cadastro de Marca");
        paneCabecalho.add(cabecalho);
        
        //efetua o binding
        SwingBinder binder = new SwingBinder(this, marca);
        binder.bind();
        
        //prepara a tela para edição
        this.limpar();

    }
    
/*
     * Para limpar os atributos numericos e colocar o foco no campo codigo
     */
    @BeforeAction
    @AfterAction({"gravar", "excluir"})
    public void limpar() {
      txtcodigo.requestFocus();
      txtcodigo.setText("");
    //  txtdescricao.setText("");
    }
      
    @BeforeAction("excluir")
    public boolean confirmaExclusao() {
        return MsgUtils.showMsgConfirmaExclusao(this);
    }
    
        
     /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrmMarca().setVisible(true);
                StartupHelper helper = new StartupHelper();
                //StartupHelper helper = new StartupHelper(new Locale("pt", "BR"), "dd/MM/yyyy");
                helper.setRunNoopCommand(false);
                helper.setLoadValidatorRules(false);
                helper.initialize();
            }
        });
    }
J

eu mesma tenho q tratar a exceção no try-catch??
o validator não deveria abrir uma optionPane com a mensagem q coloquei na anotação?

M

Jjap:
eu mesma tenho q tratar a exceção no try-catch??
o validator não deveria abrir uma optionPane com a mensagem q coloquei na anotação?

Primeiramente, desculpas pela demora em responder, é que estou bem atarefado !!!

Bem, eu só desenvolvo para Web, não sei se funciona igual, mais na Web em algum lugar eu tenho que comparar se o hibernate retornou algum erro na validação e exibir essas mensagens. Será que vc não teria que criar algum objeto que retornasse as mensagens ?? Infelizmente não vou poder te ajudar, mas dá um googleada e veja o que acha.

Desculpas !!!

Criado 12 de setembro de 2007
Ultima resposta 18 de set. de 2007
Respostas 8
Participantes 2