Pessoal estou precisando fazer uma alteração no banco, so que a tabela que estou tentando alterar os dados tem um chave primaria fraca, e preciso passar mas alguns argumentos para se indentificar um tupla(linha). Bem como posso fazer para execultar uma alteração deste tipo com hibernate, no caso pessei em execultar o sql porem tem dois fatores, primeiro que ai eu não aproveitaria o que o hibernate me oferece de mais bacana(o fato de nao ta precisando cria-las) e segundo que também não consegui mesmoooo :oops: .
Cara deu uma olha e fiz, mas so que ta gerando um erro dizendo que a tabela nao esta mapeado, mas esta, tanto que eu incluo nele pelo hibernate. Tem que ser feito algo a mais? O erro e o codigo que fiz segue abaixo.
Codigo:
public void alterar(AcentoFutebol acento){
Query query = session.createQuery("update valoringresso set parcelado= :parcelado, valoringresso= :valoringresso where idjogo= :idjogo and idlugar= :idlugar");
query.setInteger("idlugar", acento.getIdlugar());
query.setInteger("idjogo", acento.getIdjogo());
query.setInteger("valoringresso", acento.getValoringresso());
query.setString("parcelado", acento.getParcelado());
int result = query.executeUpdate();
}
eu tenho a Entidade Usuario e os atributos login e senha, olha como fica:
String hql = "from Usuario as usuario where login = '"
+ usuario.getLogin() + "' and senha = '"
+ usuario.getSenha() + "'";
att,
montovani
valoringresso o nome da entidade
os atributos são:
idjogo
idlugar
parcelado
valoringresso
Só que os que quero alterar e só os dois ultimos atributos.
bem mas este exemplo não seria para inserir. Eita velho to apanhando igual cachorro doido
pedruhenrik
o nome da sua entidade esta com V maiusculo ou minusculo?
experimenta assim:
e assim:
nesse meu exemplo eu só fiz um select msm.
KKK normal,logo vc resolve.
att,
montovani
Cara ta tudo minusculo.
Bem os teste que vc sugeriu brother infelismente nao deu.
:lol: rsrsr Cara eu espero porque senão vou ter que abandonar o hibernete e fazer tudo por sql. Affs… quero nem imaginar isto.
pedruhenrik
estranho.
e assim?
posta a sua entidade Valoringresso.
att,
montovani
Isto cara so que o valor da entidade esta minusculo
Classe que contem os dados de valoringresso
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagedados;importjava.io.Serializable;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;importjavax.persistence.Table;/** * * @author Administrador */@Entity@Table(name="valoringresso")publicclassAcentoFutebolimplementsSerializable{@Id@Column(name="idjogo")privateintidjogo;@Column(name="idlugar")privateintidlugar;@Column(name="valoringresso")privateintvaloringresso;@Column(name="parcelado")privateStringparcelado;publicintgetIdjogo(){returnidjogo;}publicvoidsetIdjogo(intidjogo){this.idjogo=idjogo;}/** * @return the idlugar */publicintgetIdlugar(){returnidlugar;}/** * @param idlugar the idlugar to set */publicvoidsetIdlugar(intidlugar){this.idlugar=idlugar;}/** * @return the parcelado */publicStringgetParcelado(){returnparcelado;}/** * @param parcelado the parcelado to set */publicvoidsetParcelado(Stringparcelado){this.parcelado=parcelado;}/** * @return the valoringresso */publicintgetValoringresso(){returnvaloringresso;}/** * @param valoringresso the valoringresso to set */publicvoidsetValoringresso(intvaloringresso){this.valoringresso=valoringresso;}}
Desde ja cara valeu pela força ai. :lol:
pedruhenrik
[chuteModeOn]
[/chuteModeOn]
olha nem testei ainda mas tenta assim, o q acontece rs.
assim q sobrar um tempo livre vou testar para valer.
att,
montovani
pedruhenrik:
[chutometroModeOn]
[/chutometroModeOn]
olha nem testei ainda mas tenta assim, o q acontece rs.
assim q sobrar um tempo livre vou testar para valer.
att,
Cara… vou testar, mas AcentosFutebol e so o nome da classe VO, o nome da tabela no banco(Postgresql) e valoringresso mesmo. Bem vou testar para desencargo, mas se der certo vou achar este troxo estranho viu… rsrsrs.
montovani
Cara fiz o teste aqui e esta acontecendo como uns testes que eu fiz execultando em vez da função session.createQuery() a função session.createSQLQuery(). No caso ele execulta, nao da nenhum erro, porem não alterar nada no banco. Muitooooo estranho velho. O mesmo SQL se execulto no PGAdim fufa que e uma maravilha, mas com o Hibernate, so Jesus.
Alias vc sabe me dizer qual e a diferença entre esta duas funções e porque devo usar uma e nao a outra?
pmlm
Tu estás a fazer update à entidade mesmo. O Hibernate encarrega-se de fazer à tabela. Daí aquele @Table na classe.
montovani
Hum boa cara… não sabia valeu :lol: . Mas vc sabe me responder tambem qual a diferença entra a função createSQLQuery e createQuery e porque devo usar uma e nao a outra. Ta estranho o trem nao gera erro mas nao altera, ja tentei inverter a posição dos parametros para ver se era isto mais nada.
pedruhenrik
olha acho q o monstrinho abaixo funciona, pelo menos temporariamente:
As an example, to execute an HQL UPDATE, use the Query.executeUpdate() method. The method is named for those familiar with JDBC's PreparedStatement.executeUpdate():
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName";
// or String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
acho q o ideal seria assim.
att,
pedruhenrik
com HQL:
publicvoidatualiza(AcentoFutebolacento){Transactiontx=session.beginTransaction();StringhqlUpdate="update AcentoFutebol acento set acento.parcelado= :parcelado,acento.valoringresso= :valoringresso where acento.idjogo= :idjogo and acento.idlugar= :idlugar";session.createQuery(hqlUpdate).setString("parcelado",acento.getParcelado()).setInteger("valoringresso",acento.).setInteger("idjogo",acento.).setInteger("idlugar",acento.).executeUpdate();tx.commit();session.close();}
createQuery é usado para criar HQL
createSQLQuery é usado para criar uma query SQL Nativa (eu acho).
att,
montovani
Cara fechou deu certo. Observei que sem o comit ele não ia, quando você postou esta alterantiva com o comit, pensei será que e por isto que ele execulta mas nao ta alterando. Era e faz sentido ne… mas não tinha colocado pq pensei que este metodo createQuery ja fazia isto tudo por traz dos panos, mas beleza. O codigo ficou assim então: