Erro estranho do hibernate

Estou com um problema estranho do hibernate:

Eu tenho as classes:

@Entity
@Table(name="aloca_turma_sala")
public class Aloca implements Serializable{
	
	@EmbeddedId
	private AlocaPK id;
	
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codcampus",insertable=false,updatable=false)
	private Campus campus;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumns(value={
				@JoinColumn(name="codcampus",insertable=false,updatable=false),
				@JoinColumn(name="codbloco",insertable=false,updatable=false)
		})
	private Bloco bloco;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codpavimento",insertable=false,updatable=false)
	private Pavimento pavimento;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumns(value={
			@JoinColumn(name="codcampus",insertable=false,updatable=false),
			@JoinColumn(name="codbloco",insertable=false,updatable=false),
			@JoinColumn(name="codpavimento",insertable=false,updatable=false),
			@JoinColumn(name="codsala",insertable=false,updatable=false),
	})
	private Sala sala;
	@ManyToOne(fetch=FetchType.LAZY)
		@JoinColumn(name="codturma",insertable=false,updatable=false)
	private Turma turma;
	@Column(name="horainicio",insertable=false,updatable=false)
	private String horaInicio;
	@Column(name="horafim",insertable=false,updatable=false)
	private String horaFim;
	@Column(name="diasemana",insertable=false,updatable=false)
	private String diaSemana;
//gets e sets omitidos
@Embeddable
public class AlocaPK implements Serializable{
	@Column(name="codcampus")
	private String codCampus;
	@Column(name="codbloco")
	private String codBloco;
	@Column(name="codpavimento")
	private Long codPavimento;
	@Column(name="codsala")
	private String codSala;
	@Column(name="codturma")
	private String codTurma;
	@Column(name="horainicio")
	private String horaInicio;
	@Column(name="horafim")
	private String horaFim;
	@Column(name="diasemana")
	private String diaSemana;
//gets e sets omitidos
@Entity
public class Sala implements Serializable{
	@EmbeddedId
	private SalaPK id;
	@Column(name="capacidade")
	private int capacidade;
	@Column(name="arcondicionado")
	private int arCondicionado;
	@Column(name="ventilador")
	private int ventilador;
	@Column(name="ativo")
	private String ativo;
	@Column(name="dscsala")
	@OrderBy
	private String dscSala;
	@Column(name="tipoquadro")
	private String tipoQuadro;
	@Column(name="datashow")
	private String dataShow;
	
	@ManyToOne 
	@JoinColumn(name="codtiposala")   
   	private TipoSala tipoSala;
	
	@ManyToOne(fetch=FetchType.LAZY) 
		@JoinColumns(value={
				@JoinColumn(name="codcampus",insertable=false,updatable=false),
				@JoinColumn(name="codbloco",insertable=false,updatable=false),
				@JoinColumn(name="codpavimento",insertable=false,updatable=false)
		})
	private Andar andar;
//gets e sets omitidos
public class SalaPK implements Serializable{
	@Column(name="codsala")
	private String codSala;
	@Column(name="codcampus")
	private String codCampus;
	@Column(name="codbloco")
	private String codBloco;
	@Column(name="codpavimento")
	private int codPavimento;
//gets e sets omitidos

No banco:


SQL> desc sala
 Name                            Null?    Type
 ------------------------------- -------- ----
 CODSALA                         NOT NULL VARCHAR2(5)
 CAPACIDADE                               NUMBER(5)
 ARCONDICIONADO                           NUMBER(2)
 VENTILADOR                               NUMBER(2)
 ATIVO                                    VARCHAR2(1)
 DSCSALA                                  VARCHAR2(50)
 TIPOQUADRO                               VARCHAR2(20)
 DATASHOW                                 VARCHAR2(1)
 CODCAMPUS                       NOT NULL VARCHAR2(2)
 CODBLOCO                        NOT NULL VARCHAR2(1)
 CODPAVIMENTO                    NOT NULL NUMBER(5)
 CODTIPOSALA                     NOT NULL NUMBER(5)

SQL> desc aloca_turma_sala
 Name                            Null?    Type
 ------------------------------- -------- ----
 CODCAMPUS                       NOT NULL VARCHAR2(2)
 CODBLOCO                        NOT NULL VARCHAR2(1)
 CODPAVIMENTO                    NOT NULL NUMBER(5)
 CODSALA                         NOT NULL VARCHAR2(5)
 CODTURMA                        NOT NULL VARCHAR2(7)
 HORAINICIO                      NOT NULL VARCHAR2(5)
 HORAFIM                         NOT NULL VARCHAR2(5)
 DIASEMANA                       NOT NULL VARCHAR2(10)

Eu faço realizo o CRUD tranquilamente no banco com essa configuração, isso se eu colocar um numero INTEIRO no codigo da sala ao cadastrar sala. Se eu colocar um alfanumerico, ele cadastra tbm. MAs se eu fizer uma pesquisa no banco ele me dá o seguinte erro:

08/12/2008 16:33:09 org.hibernate.type.NullableType nullSafeGet
INFO: could not read column value from result set: codsala; Falha ao converter para representação interna
org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2147)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
	at org.hibernate.loader.Loader.list(Loader.java:2023)
	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
	at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:150)
	at br.unig.scif.dao.AlocaDao.listaAlocacoes(AlocaDao.java:46)
	at br.unig.scif.bean.AlocaBean.imprimeAlocacoes(AlocaBean.java:327)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Falha ao converter para representação interna
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:219)
	at oracle.jdbc.driver.OracleStatement.getLongValue(OracleStatement.java:3022)
	at oracle.jdbc.driver.OracleStatement.getIntValue(OracleStatement.java:2975)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:309)
	at oracle.jdbc.driver.OracleResultSet.getInt(OracleResultSet.java:1354)
	at com.mchange.v2.c3p0.impl.NewProxyResultSet.getInt(NewProxyResultSet.java:2573)
	at org.hibernate.type.IntegerType.get(IntegerType.java:28)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
	at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
	at org.hibernate.type.ComponentType.hydrate(ComponentType.java:560)
	at org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
	at org.hibernate.type.ManyToOneType.hydrate(ManyToOneType.java:103)
	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2031)
	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1371)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1299)
	at org.hibernate.loader.Loader.getRow(Loader.java:1197)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
	at org.hibernate.loader.Loader.doQuery(Loader.java:689)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
	at org.hibernate.loader.Loader.doList(Loader.java:2144)
	... 41 more

Alguem pode me ajudar???

posta sua consulta ai

opa!
Obrigado por responder!
Vai ai a consulta:

public List verificaAlocacoes(Aloca aloca){ 
		return this.session.createSQLQuery("select * from aloca_turma_sala where codturma= :codturma and codcampus= :codcampus and horainicio = :horainicio and horafim = :horafim and diasemana = :diasemana")
							.setParameter("codturma", aloca.getId().getCodTurma())
							.setParameter("codcampus", aloca.getId().getCodCampus())
							.setParameter("horainicio", aloca.getId().getHoraInicio())
							.setParameter("horafim", aloca.getId().getHoraFim())
							.setParameter("diasemana", aloca.getId().getDiaSemana())
							.list();
	}	

Tenta fazer assim pra ver o que acontece…

Session s = HibernateUtil.getSession();
Criteria qry = s.createCriteria(Aloca.class).
add( Restrictions.eq("id.codturma",aloca.getId().getCodTurma())).
add( Restrictions.eq("id.codcampus", aloca.getId().getCodCampus())).
add( Restrictions.eq("id.horainicio", aloca.getId().getHoraInicio())).
add( Restrictions.eq("id.horafim", aloca.getId().getHoraFim())).
add( Restrictions.eq("id.diasemana", aloca.getId().getDiaSemana()));
return qry.list();

Vlw mais uma vez!
Deu o mesmo erro…
É muito estranho esse erro…
No banco, na entidade, o codsala é alfanumerico…como pode ele aceitar qdo cadastro a sala com o código “101” e “A101”, mas na hora q faço a busca para gerar relatorio ele implica se tiver o registro “A101”…
O engraçado que tem outros casos de codigos alfanumericos e ele nao implica, tipo o codigo da turma… :frowning:
E eu to começando com hibernate sozinho, agora nem sei o q fazer…

mata esse cara em Aloca pra testar:

@ManyToOne(fetch=FetchType.LAZY) @JoinColumns(value={ @JoinColumn(name="codcampus",insertable=false,updatable=false), @JoinColumn(name="codbloco",insertable=false,updatable=false), @JoinColumn(name="codpavimento",insertable=false,updatable=false), @JoinColumn(name="codsala",insertable=false,updatable=false), }) private Sala sala;

o codpavimento vc define com int em um lugar e Long em outro, padroniza isso

O codigo tah juntinho, porém a declaração de sala está assim:

@ManyToOne(fetch=FetchType.LAZY)   
    @JoinColumns(value={   
            @JoinColumn(name="codcampus",insertable=false,updatable=false),   
            @JoinColumn(name="codbloco",insertable=false,updatable=false),   
            @JoinColumn(name="codpavimento",insertable=false,updatable=false),   
            @JoinColumn(name="codsala",insertable=false,updatable=false),   
    })   
    private Sala sala;   

E troquei o int por long…tbm não é…

O engraçado que se eu fizer uma busca em sala, ele retorna certinho…Em aloca não…

entao… mata esse Sala de Aloca pra testar a consulta

Funcionou…
Agora vc me pegou…
Quando eu uso o EmbeddedId eu nao teria a necessidade de usar esse tipo de associação???
Me explica, por favor… :shock:

Pode e vc pode tbem colocar direto na classe pk sacou?
entao o AlocaPK teria o Sala e nao codsala e por ai vai… se ligou?
Ta fazendo o bind errado alguma coisa assim
Ativa tbem o show sql pra ver como ele ta montando sua consulta…

true

declara a Sala asim:

 @ManyToOne(fetch=FetchType.LAZY)    
     @JoinColumns(value={    
             @JoinColumn(name="codsala",insertable=false,updatable=false),    
             @JoinColumn(name="codcampus",insertable=false,updatable=false),    
             @JoinColumn(name="codbloco",insertable=false,updatable=false),    
             @JoinColumn(name="codpavimento",insertable=false,updatable=false),    
     })    
     private Sala sala; 

Pode e vc pode tbem colocar direto na classe pk sacou?
entao o AlocaPK teria o Sala e nao codsala e por ai vai… se ligou?
Ta fazendo o bind errado alguma coisa assim
Ativa tbem o show sql pra ver como ele ta montando sua consulta…

true

declara a Sala asim:

 @ManyToOne(fetch=FetchType.LAZY)    
     @JoinColumns(value={    
             @JoinColumn(name="codsala",insertable=false,updatable=false),    
             @JoinColumn(name="codcampus",insertable=false,updatable=false),    
             @JoinColumn(name="codbloco",insertable=false,updatable=false),    
             @JoinColumn(name="codpavimento",insertable=false,updatable=false),    
     })    
     private Sala sala; 

Funcionou!
Era a ordem dos joins!

Caraca…cada coisa…

Muito obrigado pela atenção!

Essa eu não esqueço mais!