Como saber o que esta inserindo na query do hibernate

Tem como saber o que está sendo inserido em uma query feita pelo hibernate?
Ex:

insert
into
Sala
(codcampus, codbloco, codpavimento, arcondicionado, ativo, capacidade, datashow, dscsala, tipoquadro, codtiposala, ventilador, codSala)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

O valor das “?”.

Eu to mandando inserir e nao sei se ele esta colocando os valores certos para as colunas…

Antes de inserir manda imprimir,

System.out.println(As tuas variaveis);

bom…mas como como vc não sabe se é vc quem define isso logo abaixo…

Olá!obrigado por postar.
Eu já fiz isso…
E mostra estar tudo certinho dentro do objeto que quero salvar.
Mas eu agora fiquei na duvida se ele esta colocando os valores nos lugares certos, pois dá o erro:

ORA-01401: inserted value too large for column

Could not synchronize database state with session

Este erro é do banco de Dados.
O tamanho que vc esta querendo inserir no banco é maior do que ele suporta.
verifique o que vc esta tentando inserir?

O pior que jah verifiquei mais de 10x .Eu já coloquei os valores tudo “1” e dá a msm coisa…

Vide o banco:

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)

A classe java:

@Entity
public class Sala implements Serializable{
	@Id
	private String codSala;
	@Column(name="capacidade")
	private int capacidade;
	@Column(name="arcondicionado")
	private int arCondicionado;
	@Column(name="ventilador")
	private int ventilador;
	@Column(name="ativo",length=1)
	private String ativo;
	@Column(name="dscsala",length=50)
	private String dscSala;
	@Column(name="tipoquadro",length=20)
	private String tipoQuadro;
	@Column(name="datashow",length=1)
	private String dataShow;
	
	@ManyToOne(cascade={CascadeType.ALL})
		@JoinColumn(name="codtiposala")
	private TipoSala tipoSala;
	
	
	@ManyToOne(cascade={CascadeType.ALL}) 
		@JoinColumns(value={
				@JoinColumn(name="codcampus"),
				@JoinColumn(name="codbloco"),
				@JoinColumn(name="codpavimento")
		})
	private Andar andar;
//gets e sets omitidos

Verifique se não tem espaços em branco junto com as variáveis String.

primeiro descubra qual o campo que esta dando isto… provavelmente é em algum de varchar 1 ou 2 como tem varios ai… se no que tem varchar 1 vc colocar "1 " vai dar este erro… coloque um .trim(); na string antes de setar ela na classe persistente… assim vc garante que não tera espaço em branco… e no seu jsp coloque maxlength e size de todos os campos compativeis com o tamanho dos mesmos no banco… não permitindo um tamanho maior que é aquele que esta no banco… assim deve funcionar…

Já verifiquei tbm…
aparentemente não tem…
O que parece que o hibernate tah jogando os valores dos codigos de campus,bloco e pavimento em lugares errados na hora de inserir…eu já testei gravar somente com eles, pois são os unicos campos NOT NULL e dá o msm erro…

Amigo habilite o log do hibernate e coloca em modo debug que será possível visualizar todas as rotinas executadas.

É impressionante…eu coloquei o objeto Andar na mão, nos outros campus coloquei o “.trim()” nas strings e tbm nao funcionou…Veja:

public class SalaBean implements Serializable{
	private Sala sala = new Sala();
	private String codCampus;
	private String codBloco;
	private int codPavimento;
	private int codTipoSala;
	
	public String getCodCampus() {
		return codCampus;
	}

	public void setCodCampus(String codCampus) {
		this.codCampus = codCampus;
	}

	public String getCodBloco() {
		return codBloco;
	}

	public void setCodBloco(String codBloco) {
		this.codBloco = codBloco;
	}

	public int getCodPavimento() {
		return codPavimento;
	}

	public void setCodPavimento(int codPavimento) {
		this.codPavimento = codPavimento;
	}

	public int getCodTipoSala() {
		return codTipoSala;
	}

	public void setCodTipoSala(int codTipoSala) {
		this.codTipoSala = codTipoSala;
	}

	public SalaBean() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Sala getSala() {
		return sala;
	}

	public void setSala(Sala sala) {
		this.sala = sala;
	}

	public String salvarSala(){
		String retorno;
		try{//cria uma sessao do hibernate e inicia a transação	
			Session sessao = new HibernateUtil().getSession();
			DaoFactory factory = new DaoFactory();
			factory.beginTransaction();
			//buscar o objeto do tiposala
			TipoSala tipoSala = new Dao<TipoSala>(sessao,TipoSala.class).procura(codTipoSala);
			//preenche os codigos do andar para preparar para a busca
			AndarPK andarpk = new AndarPK();
			andarpk.setCodBloco(codBloco);
			andarpk.setCodPavimento(codPavimento);
			andarpk.setCodCampus(codCampus);
			//busca o objeto andar
			//Andar andar = new Dao<Andar>(sessao,Andar.class).procura(andarpk);
			
			Campus campus = new Campus();
			campus.setCodCampus("01");
			campus.setNomeCampus("Campus teste");
			
			Bloco bloco = new Bloco();
			bloco.setCampus(campus);
			bloco.setCodBloco("K");
			
			Pavimento pavimento = new Pavimento();
			pavimento.setCodPavimento(1);
			pavimento.setDscPavimento("Algum pavimento");
			
			AndarPK id = new AndarPK();
			id.setCodBloco("K");
			id.setCodCampus("01");
			id.setCodPavimento(1);
			
			Andar andar = new Andar();
			andar.setBanheiro(1);
			andar.setBebedouro(1);
			andar.setBloco(bloco);
			andar.setId(id);
			andar.setPavimento(pavimento);
			//termina de construir o objeto sala
			sala.setTipoSala(tipoSala);
			sala.setAndar(andar);
									
			//printando os valores inseridos no objeto sala
			System.out.println("CodSala= "+sala.getCodSala()+"tipo=varchar2(5)");
			System.out.println("Codcampus do andarPk= "+sala.getAndar().getBloco().getCampus().getCodCampus()+"tipo=varchar2(5)");
			System.out.println("Descricao da sala= "+sala.getDscSala()+"tipo=varchar2(50)");
			System.out.println("ArCondicionado= "+sala.getArCondicionado()+"tipo=number(2)");
			System.out.println("TipoQuadro= "+sala.getTipoQuadro()+"tipo=varchar2(20)");
			System.out.println("ativo= "+sala.getAtivo()+"tipo=varchar2(1)");
			System.out.println("Capacidade= "+sala.getCapacidade()+"tipo=number(5)");
			System.out.println("Ventilador= "+sala.getVentilador()+"tipo=number(2)");
			System.out.println("codbloco= "+sala.getAndar().getBloco().getCodBloco()+"tipo=varchar2(1)");
			System.out.println("codpavimento= "+sala.getAndar().getPavimento().getCodPavimento()+"tipo=number(5)");
			System.out.println("codbloco do AndarPk= "+sala.getAndar().getBloco().getCodBloco()+"tipo=varchar2(1)");
			System.out.println("codpavimento do AndarPk= "+sala.getAndar().getPavimento().getCodPavimento()+"tipo=number(5)");
			System.out.println("codtiposala= "+sala.getTipoSala().getCodTipoSala()+"tipo=number(5)");
			System.out.println("Datashow= "+sala.getDataShow()+"tipo=varchar2(1)");
			
			
			//inserindo no banco
			try{
				new Dao<Sala>(sessao,Sala.class).adiciona(sala);
				sessao.flush();
				factory.commit();
			}catch (Exception e) {
				throw e;
			}finally{
				factory.closeSession();
			}
			retorno = "sucesso";
		}catch (Exception e) {
			System.out.println("Erro ao tentar cadastrar sala");
			retorno = "falha";
		}	

		return retorno;
	}
}

Para mostrar o que o Hibernate manda pro banco.

Se voce usa o hibernate.properties adicione essa linha nas configurações:

hibernate.show_sql=true

E se usa o hibernate.cfg.xml adicione essa linha nas configurações:

<property name="hibernate.show_sql">true</property>

Obrigado, amigo…
Essa configuração eu jah havia feito, na verdade eu queria saber se tem como saber os valores dos parametros “?”…

Até onde eu lembrava com essa configuração o hibernate mostra os valores também.