Hibernate não salva e tbm nao dá erro

5 respostas
pimentaft

Estou com um problema com o hibernate que não quer salvar um objeto. Eu já printei para verificar se o objeto estava completamente preenchido e está ok. O que me intriga que le nao dá erro, mas quando vou verificar no banco nao tem nada…Alguem pode me dá uma luz???

public String salvarSala(){
		String retorno;
		try{	
			Session sessao = new HibernateUtil().getSession();
			DaoFactory factory = new DaoFactory();
			factory.beginTransaction();

			TipoSala tipoSala = new Dao<TipoSala>(sessao,TipoSala.class).procura(codTipoSala);

			AndarPK andarpk = new AndarPK();
			andarpk.setCodBloco(codBloco);
			andarpk.setCodPavimento(codPavimento);
			Andar andar = new Dao<Andar>(sessao,Andar.class).procura(andarpk);
			sala.setArCondicionado(this.sala.getArCondicionado());
			sala.setAtivo(this.sala.getAtivo());
			sala.setCapacidade(this.sala.getCapacidade());
			sala.setVentilador(this.sala.getVentilador());
			sala.setTipoQuadro(this.sala.getTipoQuadro());
			sala.setAndar(andar);
			sala.setTipoSala(tipoSala);
			sala.setDataShow("s");
			try{
				factory.beginTransaction();
				new Dao<Sala>(sessao,Sala.class).adiciona(sala);
				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;
	}

5 Respostas

bruno_savi

vc ja verificou se ele está mapeado…

pimentaft

Mapeei no hibernate.cfg.xml:

<mapping class="br.unig.scif.modelo.Sala"/>

E coloquei as anotações na classe sala:

public class Sala implements Serializable{
	@Id
	@GeneratedValue
	@Column(name="codsala")
	private String codSala;
	@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")
	private String dscSala;
	@Column(name="tipoquadro")
	private String tipoQuadro;
	@Column(name="datashow")
	private String dataShow;
	
	@ManyToOne
		@JoinColumn(referencedColumnName="codtiposala")
	private TipoSala tipoSala;
	
	@Id
	@ManyToOne	
		@JoinColumn(referencedColumnName="codandar")
	private Andar andar;
//gets e sets omitidos

Para buscar no banco ele tá fazendo certinho…só na hora de salvar msm…

awilaz

Pode passar os códigos das classes que estão relacionadas?

pimentaft

dao:

public class Dao<T> {
	private final Session session;
	private final Class classe;
	public Dao(Session session,Class classe) {
		this.session = session;
		this.classe = classe;
	}

	public void adiciona(T u) {
		this.session.save(u);
	}
	public void remove (T u) {
		this.session.delete(u);
	}
	public void atualiza (T u) {
		this.session.merge(u);
	}
	public List<T> listaTudo() {
		return this.session.createCriteria(this.classe).list();
	} 

	public T procura(String id) {
		return (T) session.load(this.classe, id);
	}
	public T procura(int id) {
		return (T) session.load(this.classe, id);
	}
	public T procura(Serializable id) {     
	       return (T) session.load(this.classe, id);     
	}    
}

Campus:

@Entity
public class Campus implements Serializable{
	@Id
	@Column(name="codcampus")
	private String codCampus;
	
	@Column(name="nomecampus")
	private String nomeCampus;
	
	@OneToMany(mappedBy = "campus")   
	private List<Bloco> blocos;
	
	//gets e sets omitidos
}

Bloco:

@Entity
public class Bloco implements Serializable{
	@ManyToOne (fetch=FetchType.LAZY) //o seu conteúdo é trazido quando acessado pela primeira vez. 
	@JoinColumn(name="codcampus")
	private Campus campus;
	@Id
	@Column(name="codbloco")
	private String codBloco;
	//gets e sets omitidos		
}

Pavimento:

@Entity
public class Pavimento implements Serializable{
	@Id
	@Column(name="codpavimento")
	private int codPavimento;
	@Column(name="dscpavimento")
	private String dscPavimento;
	
	public int getCodPavimento() {
		return codPavimento;
	}
	public void setCodPavimento(int codPavimento) {
		this.codPavimento = codPavimento;
	}
	public String getDscPavimento() {
		return dscPavimento;
	}
	public void setDscPavimento(String dscPavimento) {
		this.dscPavimento = dscPavimento;
	}
}

Andar(ele é relacionamento entre bloco e pavimento)

@Entity
public class Andar implements Serializable{
	@EmbeddedId
	private AndarPK id;
	
	@ManyToOne
		@JoinColumn(name="codbloco",referencedColumnName="codbloco",insertable=false,updatable=false)
	private Bloco bloco;
	
	@ManyToOne 
		@JoinColumn(name="codpavimento",referencedColumnName="codpavimento",insertable=false,updatable=false)
	private Pavimento pavimento;
	
	@Column(name="banheiro")
	private int banheiro;
	@Column(name="bebedouro")
	private int bebedouro;
//gets e sets omitidos

andarPK:

@Embeddable
public class AndarPK implements Serializable{
	@Column(name="codpavimento")
	private int codPavimento;
	@Column(name="codbloco")
	private String codBloco;
//gets e sets omitidos

Sala:

@Entity
public class Sala implements Serializable{
	@Id
	@GeneratedValue
	@Column(name="codsala")
	private String codSala;
	@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")
	private String dscSala;
	@Column(name="tipoquadro")
	private String tipoQuadro;
	@Column(name="datashow")
	private String dataShow;
	
	@ManyToOne
		@JoinColumn(referencedColumnName="codtiposala")
	private TipoSala tipoSala;
	
	@Id
	@ManyToOne	
		@JoinColumn(referencedColumnName="codandar")
	private Andar andar;
//gets e sets omitidos
@Entity
public class TipoSala implements Serializable{
	@Id
	@Column(name="codtiposala")
	private int codTipoSala;
	@Column(name="dsctiposala")
	private String dscTipoSala;
//gets e sets omitidos

HibernateUtil:

public class HibernateUtil {
		public static SessionFactory factory; 
		static{ 
		Configuration conf = new AnnotationConfiguration(); 
		conf.configure();
		factory = conf.buildSessionFactory(); 
		} 

		public static Session getSession() { 
			return factory.openSession(); 

		} 
}

DaoFactory:

public class DaoFactory {
	private final Session session;
	public Transaction transaction;
	public DaoFactory(){
		session = HibernateUtil.getSession();
	}
public void beginTransaction(){
	this.transaction = this.session.beginTransaction();
}
public void commit(){
	this.transaction.commit();
	this.transaction = null;
}
public boolean hasTransaction(){
	return this.transaction != null;
}
public void rollback(){ 
	this.transaction.rollback();
	this.transaction = null;
}
public void closeSession(){
	this.session.close();
}

}

Vlw!!!

pimentaft

Eu troquei o new Dao(sessao,Sala.class).adiciona(sala) por sessao.merge

apareceu um erro apareceu nos logs(ufa)…

ORA-00904: invalid column name

apos executar isso:

Hibernate:
select
sala0_.andar as andar4_0_,
sala0_.arcondicionado as arcondic3_4_0_,
sala0_.ativo as ativo4_0_,
sala0_.capacidade as capacidade4_0_,
sala0_.datashow as datashow4_0_,
sala0_.dscsala as dscsala4_0_,
sala0_.tipoquadro as tipoquadro4_0_,
sala0_.codtiposala as codtipo10_4_0_,
sala0_.ventilador as ventilador4_0_
from
Sala sala0_
where
sala0_.andar=?

Criado 9 de outubro de 2008
Ultima resposta 9 de out. de 2008
Respostas 5
Participantes 3