Problemas com Hibernate e Versionamento (controle de concorrencia)

0 respostas
J

Olá gente!
Gostaria de trocar umas idéias com vcs acerca de um problema que está me atormentando já a três dias.
A falha é relativa (acredito, pq estou com dificuldades de debugar) ao serviço de versionamento do hibernate. Estou usando o annotation 3.3.0. Exatamente após eu adicionar este serviço nas minhas classes eu passei a ter problemas (a Exception a baixo). O pior é que hora funciona ora não e assim vai sem que eu possar debugar com tranquilidade para a correção do erro. Já chegei a retirar do o serviço e, pior, deu o mesmo pau. Detalhe não dava pau algum até eu inventar moda.

no aguardo da ajuda,
julio gustavo.

ps.: o código da classe que está me dando dor de cabeça está a seguir à esta Exception.

java.lang.ArrayIndexOutOfBoundsException: -66

at org.hibernate.persister.entity.AbstractEntityPersister.checkVersion(AbstractEntityPersister.java:1726)

at org.hibernate.persister.entity.AbstractEntityPersister.generateUpdateString(AbstractEntityPersister.java:1682)

at org.hibernate.persister.entity.AbstractEntityPersister.generateUpdateString(AbstractEntityPersister.java:1648)

at org.hibernate.persister.entity.AbstractEntityPersister.postConstruct(AbstractEntityPersister.java:2630)

at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:386)

at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)

at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:216)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)

at br.com.it.utils.persistence.SFC.(SFC.java:32)

at br.com.it.utils.persistence.SFC.getInstance(SFC.java:48)

at br.com.it.utils.persistence.DAO.getSession(DAO.java:88)

at br.com.it.utils.persistence.DAO.(DAO.java:54)

at br.com.it.utils.persistence.DAO.getDAOInstance(DAO.java:62)

at br.com.it.utils.persistence.MyEMF.getDAOInstance(MyEMF.java:22)

at br.com.it.narnia.controle.clinica.Controlador.buscar(Controlador.java:24)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)

at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63)

at javax.faces.component.UICommand.broadcast(UICommand.java:106)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:346)

at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)

at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:97)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)

at java.lang.Thread.run(Thread.java:595)

código:

// Generated 05/11/2007 23:25:03 by Hibernate Tools 3.2.0.beta8

import java.util.ArrayList;

import java.util.Date;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.OneToMany;

import javax.persistence.SequenceGenerator;

import javax.persistence.Table;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

import javax.persistence.UniqueConstraint;

import javax.persistence.Version;

import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.OptimisticLockType;

import br.com.it.utils.persistence.SCRUDE;

/**

  • Convenio generated by hbm2java
    
    */
    
    @Entity
    
    @org.hibernate.annotations.Entity(optimisticLock = OptimisticLockType.ALL, dynamicUpdate = true)
    
    @Table(name = convenio, schema = public, uniqueConstraints = {
    
    @UniqueConstraint(columnNames = { identificacao }),
    
    @UniqueConstraint(columnNames = { usuario }) })
    
    @SequenceGenerator(name = id_seq, sequenceName = convenio_id_seq, allocationSize = 1)
    
    @SuppressWarnings(serial)
    
    public class Convenio implements java.io.Serializable {
    

    private SCRUDE crud = new SCRUDE();

    // Fields

    private int id;

    private String nome;

    private String identificacao;

    private Date dataNascimento;

    private String usuario;

    private String senha;

    private String nomeFantasia;

    private String nomeContato;

    private Date contatoAniversario;

    private Integer versao;

    private Set dataDePagamentoDoConvenios = new HashSet(
    0)
    ;

    private Set internetDoConvenios = new HashSet(
    0)
    ;

    private Set telefoneDoConvenios = new HashSet(
    0)
    ;

    private Set enderecoDoConvenios = new HashSet(
    0)
    ;

    private Set credenciadoDoConvenios = new HashSet(
    0)
    ;

    // Constructors

    /** default constructor */
    
    public Convenio() {
    
    }
    
    /** minimal constructor */
    
    public Convenio(int id, String nome, String identificacao, String usuario,
    
    String senha, String nomeFantasia) {
    
    <a href="http://this.id">this.id</a> = id;
    
    this.nome = nome;
    
    this.identificacao = identificacao;
    
    this.usuario = usuario;
    
    this.senha = senha;
    
    this.nomeFantasia = nomeFantasia;
    
    }
    
    /** full constructor */
    
    public Convenio(int id, String nome, String identificacao,
    
    Date dataNascimento, String usuario, String senha,
    
    String nomeFantasia, String nomeContato, Date contatoAniversario,
    
    Integer versao,
    
    Set dataDePagamentoDoConvenios,
    
    Set internetDoConvenios,
    
    Set telefoneDoConvenios,
    
    Set credenciadoDoConvenios) {
    
    <a href="http://this.id">this.id</a> = id;
    
    this.nome = nome;
    
    this.identificacao = identificacao;
    
    this.dataNascimento = dataNascimento;
    
    this.usuario = usuario;
    
    this.senha = senha;
    
    this.nomeFantasia = nomeFantasia;
    
    this.nomeContato = nomeContato;
    
    this.contatoAniversario = contatoAniversario;
    
    this.versao = versao;
    
    this.dataDePagamentoDoConvenios = dataDePagamentoDoConvenios;
    
    this.internetDoConvenios = internetDoConvenios;
    
    this.telefoneDoConvenios = telefoneDoConvenios;
    
    this.credenciadoDoConvenios = credenciadoDoConvenios;
    
    }
    
    // Property accessors
    
    @Id
    
    @Column(name = “id”, unique = true, nullable = false, insertable = true, updatable = true)
    
    @GeneratedValue(strategy = GenerationType.AUTO, generator = “id_seq”)
    
    public int getId() {
    
    return <a href="http://this.id">this.id</a>;
    
    }
    
    public void setId(int id) {
    
    <a href="http://this.id">this.id</a> = id;
    
    }
    
    @Column(name = nome, unique = false, nullable = false, insertable = true, updatable = true, length = 150)
    
    public String getNome() {
    
    return this.nome;
    
    }
    
    public void setNome(String nome) {
    
    this.nome = nome;
    
    }
    
    @Column(name = identificacao, unique = true, nullable = false, insertable = true, updatable = true, length = 20)
    
    public String getIdentificacao() {
    
    return this.identificacao;
    
    }
    
    public void setIdentificacao(String identificacao) {
    
    this.identificacao = identificacao;
    
    }
    
    @Temporal(TemporalType.DATE)
    
    @Column(name = data_nascimento, unique = false, nullable = true, insertable = true, updatable = true, length = 4)
    
    public Date getDataNascimento() {
    
    return this.dataNascimento;
    
    }
    
    public void setDataNascimento(Date dataNascimento) {
    
    this.dataNascimento = dataNascimento;
    
    }
    
    @Column(name = usuario, unique = true, nullable = false, insertable = true, updatable = true, length = 15)
    
    public String getUsuario() {
    
    return this.usuario;
    
    }
    
    public void setUsuario(String usuario) {
    
    this.usuario = usuario;
    
    }
    
    @Column(name = senha, unique = false, nullable = false, insertable = true, updatable = true, length = 8)
    
    public String getSenha() {
    
    return this.senha;
    
    }
    
    public void setSenha(String senha) {
    
    this.senha = senha;
    
    }
    
    @Column(name = nome_fantasia, unique = false, nullable = false, insertable = true, updatable = true, length = 150)
    
    public String getNomeFantasia() {
    
    return this.nomeFantasia;
    
    }
    
    public void setNomeFantasia(String nomeFantasia) {
    
    this.nomeFantasia = nomeFantasia;
    
    }
    
    @Column(name = nome_contato, unique = false, nullable = true, insertable = true, updatable = true, length = 150)
    
    public String getNomeContato() {
    
    return this.nomeContato;
    
    }
    
    public void setNomeContato(String nomeContato) {
    
    this.nomeContato = nomeContato;
    
    }
    
    @Temporal(TemporalType.DATE)
    
    @Column(name = contato_aniversario, unique = false, nullable = true, insertable = true, updatable = true, length = 4)
    
    public Date getContatoAniversario() {
    
    return this.contatoAniversario;
    
    }
    
    public void setContatoAniversario(Date contatoAniversario) {
    
    this.contatoAniversario = contatoAniversario;
    
    }
    
    @Version
    
    @Column(name = versao)
    
    public Integer getVersao() {
    
    return this.versao;
    
    }
    
    public void setVersao(Integer versao) {
    
    this.versao = versao;
    
    }
    

    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = “convenio”)
    public List getCredenciadoDoConvenios() {

    List<CredenciadoDoConvenio> l = new ArrayList<CredenciadoDoConvenio>();
    
     l.addAll(this.credenciadoDoConvenios);
    
     return l;
    

    }

    public void setCredenciadoDoConvenios(
    
    List credenciadoDoConvenios) {
    
    this.credenciadoDoConvenios.addAll(credenciadoDoConvenios);
    
    }
    
    @CollectionOfElements
    
    @JoinTable(name=data_de_pagamento_do_convenio, joinColumns = @JoinColumn(name=convenio_id))
    
    public List getDataDePagamentoDoConvenios() {
    
    List<DataDePagamentoDoConvenio> l = new ArrayList<DataDePagamentoDoConvenio>();
    
     l.addAll(this.dataDePagamentoDoConvenios);
    
     return l;
    

    }

    public void setDataDePagamentoDoConvenios(
    
    List dataDePagamentoDoConvenios) {
    
    this.dataDePagamentoDoConvenios.addAll(dataDePagamentoDoConvenios);
    
    }
    
    @CollectionOfElements
    
    @JoinTable(name=internet_do_convenio, joinColumns = @JoinColumn(name=convenio_id))
    
    public List getInternetDoConvenios() {
    
    List<InternetDoConvenio> l = new ArrayList<InternetDoConvenio>();
    
     l.addAll(this.internetDoConvenios);
    
     return l;
    

    }

    public void setInternetDoConvenios(
    
    List internetDoConvenios) {
    
    this.internetDoConvenios.addAll(internetDoConvenios);
    
    }
    
    @CollectionOfElements
    
    @JoinTable(name=telefone_do_convenio, joinColumns = @JoinColumn(name=convenio_id))
    
    public List getTelefoneDoConvenios() {
    
    List<TelefoneDoConvenio> l = new ArrayList<TelefoneDoConvenio>();
    
     l.addAll(this.telefoneDoConvenios);
    
     return l;
    

    }

    public void setTelefoneDoConvenios(
    
    List telefoneDoConvenios) {
    
    this.telefoneDoConvenios.addAll(telefoneDoConvenios);
    
    }
    
    @CollectionOfElements
    
    @JoinTable(name=endereco_do_convenio, joinColumns = @JoinColumn(name=convenio_id))
    
    public List getEnderecoDoConvenios() {
    
    List<EnderecoDoConvenio> l = new ArrayList<EnderecoDoConvenio>();
    
     l.addAll(this.enderecoDoConvenios);
    
     return l;
    

    }

    public void setEnderecoDoConvenios(List enderecoDoConvenios) {
    
    this.enderecoDoConvenios.addAll(enderecoDoConvenios);
    
    }
    

    public Object adicionar() {

    System.out.println("pass c");
    
     Convenio novaEntidade = new Convenio();
    
     novaEntidade.setNome(this.getNome().trim().toLowerCase());
    
     novaEntidade.setIdentificacao(this.getIdentificacao().trim().toLowerCase());
    
     novaEntidade.setNomeFantasia(this.getNomeFantasia().trim().toLowerCase());
    
     novaEntidade.setDataNascimento(this.getDataNascimento());
    
     novaEntidade.setNomeContato(this.getNomeContato().trim().toLowerCase());
    
     novaEntidade.setContatoAniversario(this.getContatoAniversario());
    
     novaEntidade.setUsuario(this.getUsuario().trim().toLowerCase());
    
     novaEntidade.setSenha(this.getSenha().trim().toLowerCase());
    
     System.out.println("pass");
    
     Object o = this.crud.create(novaEntidade);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public Object adicionar(DataDePagamentoDoConvenio data) {

    DataDePagamentoDoConvenio novaEntidade = new DataDePagamentoDoConvenio();
    
     novaEntidade.setDataDePagamento(data.getDataDePagamento());
    
     this.dataDePagamentoDoConvenios.add(novaEntidade);
    
     Object o = this.crud.update(this);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public Object adicionar(InternetDoConvenio internet) {

    InternetDoConvenio novaEntidade = new InternetDoConvenio();
    
     novaEntidade.setInternet(internet.getInternet().trim().toLowerCase());
    
     novaEntidade.setTipo(internet.getTipo().trim().toLowerCase());
    
     novaEntidade.setPrincipal(internet.getPrincipal().trim().toLowerCase());
    
     this.internetDoConvenios.add(novaEntidade);
    
     Object o = this.crud.update(this);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public Object adicionar(TelefoneDoConvenio telefone) {

    TelefoneDoConvenio novaEntidade = new TelefoneDoConvenio();
    
     novaEntidade.setDdd(telefone.getDdd().trim().toLowerCase());
    
     novaEntidade.setNumero(telefone.getNumero().trim().toLowerCase());
    
     novaEntidade.setTipo(telefone.getTipo().trim().toLowerCase());
    
     novaEntidade.setPrincipal(telefone.getPrincipal().trim().toLowerCase());
    
     this.telefoneDoConvenios.add(novaEntidade);
    
     Object o = this.crud.update(this);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public Object adicionar(EnderecoDoConvenio endereco) {

    EnderecoDoConvenio novaEntidade = new EnderecoDoConvenio();
    
     novaEntidade.setPais(endereco.getPais().trim().toLowerCase());
    
     novaEntidade.setEstado(endereco.getEstado().trim().toLowerCase());
    
     novaEntidade.setCidade(endereco.getCidade().trim().toLowerCase());
    
     novaEntidade.setBairro(endereco.getBairro().trim().toLowerCase());
    
     novaEntidade.setRua(endereco.getRua().trim().toLowerCase());
    
     novaEntidade.setNumero(endereco.getNumero().trim().toLowerCase());
    
     novaEntidade.setCep(endereco.getCep().trim().toLowerCase());
    
     novaEntidade.setComplemento(endereco.getComplemento().trim().toLowerCase());
    
     this.enderecoDoConvenios.add(novaEntidade);
    
     Object o = this.crud.update(this);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public Object adicionar(CredenciadoDoConvenio credenciado) {

    CredenciadoDoConvenio novaEntidade = new CredenciadoDoConvenio();
    
     novaEntidade.setContrato(credenciado.getContrato());
    
     novaEntidade.setDataInicio(credenciado.getDataInicio());
    
     novaEntidade.setDataTermino(credenciado.getDataTermino());
    
     novaEntidade.setIdentificacaoDoCredenciado(credenciado.getIdentificacaoDoCredenciado());
    
     novaEntidade.setNomeDoCredenciado(credenciado.getIdentificacaoDoCredenciado());
    
     novaEntidade.setTipoContrato(credenciado.getTipoContrato());
    
     this.credenciadoDoConvenios.add(novaEntidade);
    
     novaEntidade.setConvenio(this);
    
     Object o = this.crud.create(this);
    
     return (!(o instanceof String)) ? novaEntidade : o;
    

    }

    public String remover() {

    return this.crud.remove(this);
    

    }

    /**

    • IMPORTANTE: só usar quando a lista desta
    • entidade houver sido carregada.
      

    */
    public String remover(DataDePagamentoDoConvenio o) {

    try {
    
     	if (this.dataDePagamentoDoConvenios.remove(o)) {
    
     		return this.crud.remove(o);
    
     	} return "Este objeto não existe no banco.";
    
     } catch (NullPointerException e) {
    
     	e.printStackTrace();
    
     	return "ERR01: Esta entidade é nula.";
    
     }
    

    }

    /**

    • IMPORTANTE: só usar quando a lista desta
    • entidade houver sido carregada.
      

    */
    public String remover(InternetDoConvenio o) {

    try {
    
     	if (this.internetDoConvenios.remove(o)) {
    
     		return this.crud.remove(o);
    
     	} return "Este objeto não existe no banco.";
    
     } catch (NullPointerException e) {
    
     	e.printStackTrace();
    
     	return "ERR01: Esta entidade é nula.";
    
     }
    

    }

    /**

    • IMPORTANTE: só usar quando a lista desta
    • entidade houver sido carregada.
      

    */
    public String remover(TelefoneDoConvenio o) {

    try {
    
     	if (this.telefoneDoConvenios.remove(o)) {
    
     		return this.crud.remove(o);
    
     	} return "Este objeto não existe no banco.";
    
     } catch (NullPointerException e) {
    
     	e.printStackTrace();
    
     	return "ERR01: Esta entidade é nula.";
    
     }
    

    }

    /**

    • IMPORTANTE: só usar quando a lista desta
    • entidade houver sido carregada.
      

    */
    public String remover(EnderecoDoConvenio o) {

    try {
    
     	if (this.enderecoDoConvenios.remove(o)) {
    
     		return this.crud.remove(o);
    
     	} return "Este objeto não existe no banco.";
    
     } catch (NullPointerException e) {
    
     	e.printStackTrace();
    
     	return "ERR01: Esta entidade é nula.";
    
     }
    

    }

    /**

    • IMPORTANTE: só usar quando a lista desta
    • entidade houver sido carregada.
      

    */
    public String remover(CredenciadoDoConvenio o) {

    try {
    
     	if (this.credenciadoDoConvenios.remove(o)) {
    
     		return this.crud.remove(o);
    
     	} return "Este objeto não existe no banco.";
    
     } catch (NullPointerException e) {
    
     	e.printStackTrace();
    
     	return "ERR01: Esta entidade é nula.";
    
     }
    

    }

    public String atualizar() {

    return this.crud.update(this);
    

    }

    public String atualizar(DataDePagamentoDoConvenio o) {

    return this.crud.update(o);
    

    }

    public String atualizar(InternetDoConvenio o) {

    return this.crud.update(o);
    

    }

    public String atualizar(TelefoneDoConvenio o) {

    return this.crud.update(o);
    

    }

    public String atualizar(EnderecoDoConvenio o) {

    return this.crud.update(o);
    

    }

    public String atualizar(CredenciadoDoConvenio o) {

    return this.crud.update(o);
    

    }

}

Criado 7 de novembro de 2007
Respostas 0
Participantes 1