-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 
Author Message
 Post subject: updating
PostPosted: Mon Jan 07, 2008 2:26 pm 
Newbie

Joined: Tue Jan 01, 2008 1:48 pm
Posts: 8
Hi everybody:

I just have spent two days trying to get hibernate updating, i believe
that my code is just right because i ran an example and i got the same result, the querys and the save works fine.
No error messages, no warnings, its like there wasnt nsession.update(object) line.
Maybe its my configuration file.


JAVA CODE:



SessionFactory fact = new Configuration().configure().buildSessionFactory();
sess = fact.openSession();
Transaction tr = sess.beginTransaction();


WebUsuario ins = (WebUsuario)sess.get(WebUsuario.class, new Integer(2));
ins.setNomUsuario("marika");
// SQLQuery q = sess.createSQLQuery("update WebUsuario set nomUsuario='loka' where codUsuario=2");

sess.update(ins);
tr.commit();
sess.close();





WEBUSUARIO MAPPING FILE:


<hibernate-mapping>
<!-- <class name="modelo.pojo.IntradiaAccion" table="TblInfAccionesSample"> -->
<class name="modelo.pojo.WebUsuario" table="WebUsuario" mutable="true" dynamic-update="true">
<cache usage="read-write"/>
<id name="codUsuario" column="codUsuario" type="java.lang.Integer">
<generator class="native"/>
</id>


<property name="nomUsuario" column="nomUsuario" type="java.lang.String" />
<property name="desUsuario" column="desUsuario" type="java.lang.String" />
<property name="contrasena" column="contrasena" type="java.lang.String" />
<property name="clave" column="clave" type="java.lang.String" />
<property name="email" column="email" type="java.lang.String" />
<property name="fechaCreacion" column="fechaCreacion" type="java.util.Date" />
<property name="fechaVencimiento" column="fechaVencimiento" type="java.util.Date" />
<property name="fechaEstado" column="fechaEstado" type="java.util.Date" />
<property name="estado" column="estado" type="java.lang.boolean" />
<property name="perfil" column="perfil" type="java.lang.String" />
<property name="codCreador" column="codCreador" type="java.lang.String" />
<property name="codActualizo" column="codActualizo" type="java.lang.String" />
<property name="fechaUltAct" column="fechaUltAct" type="java.util.Date" />
</class>
</hibernate-mapping>




HIBERNATE COFIGURATION FILE:



<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>


<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=Interbolsa;SelectedMethod=cursor</property>
<property name="connection.username">user</property>
<property name="connection.password">usuario</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>


<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

<!-- <!{1}** Enable Hibernate's automatic session context management **{1}>

<property name="current_session_context_class">thread</property>

<!{1}** Disable the second-level cache **{1}>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>-->
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="connection.isolation">4</property>

<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="cache.provider_configuration_file_resource_path">/ehcache.xml</property>
<property name="cache.use_query_cache">false</property>

<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<!-- <property name="hbm2ddl.auto">create</property> -->
<!-- <property name="hbm2ddl.auto">update</property> -->
<property name="dbcp.maxActive">50</property>
<property name="dbcp.maxIdle">50</property>
<property name="dbcp.max Wait">-1</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.test OnBorrow">true</property>
<property name="dbcp.test OnReturn">true</property>
<property name="dbcp.validationQuery">select * from ad_parametro where i_parametro=801</property>
<property name="dbcp.ps.maxActive">50</property>
<property name="dbcp.ps.maxIdle">50</property>
<property name="dbcp.ps.maxWait">1000 * 60 * 30</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<mapping resource="modelo/pojo/AdmAdministrador.hbm.xml"/>
<mapping resource="modelo/pojo/AdmGerente.hbm.xml"/>
<mapping resource="modelo/pojo/AdmCanal.hbm.xml"/>
<mapping resource="modelo/pojo/AdmAsistente.hbm.xml"/>
<mapping resource="modelo/pojo/AdmComercial.hbm.xml"/>
<mapping resource="modelo/pojo/AdmCliente.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuario.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioAdministrador.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioCanal.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioAsistente.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioComercial.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioCliente.hbm.xml"/>
<mapping resource="modelo/pojo/WebUsuarioGerente.hbm.xml"/>





</session-factory>

</hibernate-configuration>


Sorry about the bad english and the large amount of code, im going to
get crazy, please help me.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 07, 2008 2:42 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
Ssabrewolf,

"Update" does not create an "SQL UPDATE" in your database.
It only "reconnects" your object to the session, in case it wasn't already connected.
In the code you show, that does not seem necessary, since you have everything nicely wrapped in a session and transaction.

Try using "session.save(ins)" or "session.persist(ins)" instead.

_________________
Gonzalo Díaz


Top
 Profile  
 
 Post subject: updating
PostPosted: Mon Jan 07, 2008 3:02 pm 
Newbie

Joined: Tue Jan 01, 2008 1:48 pm
Posts: 8
hi gonzalo, i really aprecciate your response, i followed your advice, but i got
the same result, is there any special tag to "enable " the update?, i tried
sess.persist(ins);
sess.save(WebUsuario.class.toString(),ins);
sess.flush();

and nothing.

if it is util here id the java console output:



Hibernate: select webusuario0_.codUsuario as codUsuario6_0_, webusuario0_.nomUsuario as nomUsuario6_0_, webusuario0_.desUsuario as desUsuario6_0_, webusuario0_.contrasena as contrasena6_0_, webusuario0_.clave as clave6_0_, webusuario0_.email as email6_0_, webusuario0_.fechaCreacion as fechaCre7_6_0_, webusuario0_.fechaVencimiento as fechaVen8_6_0_, webusuario0_.fechaEstado as fechaEst9_6_0_, webusuario0_.estado as estado6_0_, webusuario0_.perfil as perfil6_0_, webusuario0_.codCreador as codCreador6_0_, webusuario0_.codActualizo as codActu13_6_0_, webusuario0_.fechaUltAct as fechaUl14_6_0_ from WebUsuario webusuario0_ where webusuario0_.codUsuario=?
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: SQL Warning: 0, SQLState:
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: [Microsoft][SQLServer 2000 Driver for JDBC]Database changed to Interbolsa
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: SQL Warning: 0, SQLState:
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Se cambió el contexto de la base de datos a 'Interbolsa'.
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: SQL Warning: 0, SQLState:
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: [Microsoft][SQLServer 2000 Driver for JDBC]Language changed to Español
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: SQL Warning: 0, SQLState:
07-ene-2008 13:54:28 org.hibernate.util.JDBCExceptionReporter logWarnings
ADVERTENCIA: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Se cambió la configuración de idioma a Español.
07-ene-2008 13:54:28 net.sf.ehcache.CacheManager$1 run
INFO: VM shutting down with the CacheManager still active. Calling shutdown.


it should be:
Hibernate: update WebUsuario blah blah blah

Thanks in advance


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jan 07, 2008 3:55 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
En principio, no veo nada raro.
No, no hay nada en especial para habilitar escritura. El mapeo podría haber estado definido como read-only, pero no es tu caso.
En el archivo de configuración hay varios beans deifinidos. ¿Es WebUsuario la única clase con la que hay problemas?
Algunas sugerencias para seguir investigando:

-el código de prueba que me muestras, ¿es totalmente independiente? Si ya tienes otra sesión rondando por ahí en tu aplicación, no te sirve de nada crear una nueva. En otras palabras, ¿estás ejecutando esto desde un método main()?
-Ese cambio de databse activa a "Interbolsa" ¿tendrá algo que ver, o ocurre después?
-Saca el log de SQL Server, y pon todo a DEBUG, a ver si eso te da más información
-Rodea el código de prueba con un try-catch, a ver si alguna excepción está ocurriendo.
-¿WebUsuario no es una view, no?
-El usuario con el que te conectas, ¿tiene suficientes permisos como para escribir?
-usa sess.persist(ins), luego session.flush(), luego tr.commit(); luego session.close(). Me parece que eso es lo que estás haciendo, pero por las dudas.

_________________
Gonzalo Díaz


Top
 Profile  
 
 Post subject: hibernate
PostPosted: Wed Jan 16, 2008 9:14 pm 
Newbie

Joined: Tue Jan 01, 2008 1:48 pm
Posts: 8
Hi Gonzalo i made it up to achieve an update but i must do a delete to make the update to works:



ins.setCodUsuario(ins.getCodUsuario());
ins.setNomUsuario("perro");
sess.delete(ins);
sess.save(ins);


sess.flush();


Any ideas about why is this happening?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 16, 2008 9:49 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
qué es ese ins.setCodUsuario(ins.getCodUsuario()); ????

El ID debe ser único a lo ancho de toda la sesión, y durante toda la vida del objeto/fila.

_________________
Gonzalo Díaz


Top
 Profile  
 
 Post subject: updating
PostPosted: Wed Jan 16, 2008 10:02 pm 
Newbie

Joined: Tue Jan 01, 2008 1:48 pm
Posts: 8
No no hagas caso de eso este es el codigo simplifacado:

WebUsuario ins = (WebUsuario)session.get(WebUsuario.class, new Integer(14));
session1.delete(ins);
session1.save(ins);
ins.setEmail("perro de vereda");
session1.flush();

Y esta es la consola de java

INFO: Not binding factory to JNDI, no JNDI name configured
Hibernate: select webusuario0_.codUsuario as codUsuario6_0_, webusuario0_.nomUsuario as nomUsuario6_0_, webusuario0_.desUsuario as desUsuario6_0_, webusuario0_.contrasena as contrasena6_0_, webusuario0_.clave as clave6_0_, webusuario0_.email as email6_0_, webusuario0_.fechaCreacion as fechaCre7_6_0_, webusuario0_.fechaVencimiento as fechaVen8_6_0_, webusuario0_.fechaEstado as fechaEst9_6_0_, webusuario0_.estado as estado6_0_, webusuario0_.perfil as perfil6_0_, webusuario0_.codCreador as codCreador6_0_, webusuario0_.codActualizo as codActu13_6_0_, webusuario0_.fechaUltAct as fechaUl14_6_0_ from WebUsuario webusuario0_ where webusuario0_.codUsuario=?
Hibernate: update WebUsuario set nomUsuario=?, desUsuario=?, contrasena=?, clave=?, email=?, fechaCreacion=?, fechaVencimiento=?, fechaEstado=?, estado=?, perfil=?, codCreador=?, codActualizo=?, fechaUltAct=? where codUsuario=?
Hibernate: delete from WebUsuario where codUsuario=?
Hibernate: insert into WebUsuario (nomUsuario, desUsuario, contrasena, clave, email, fechaCreacion, fechaVencimiento, fechaEstado, estado, perfil, codCreador, codActualizo, fechaUltAct) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) select scope_identity()

La unica forma en que sale lo de Hibernate : update ....
es haciendo un delete luego de leerlo, salvandolo y luego cambiandolo, si no hago el delete no pasa absolutamente nada. Es como si despues de
hacer le delete y salvandolo estuviera realmente sincronizado con la base

Gracias
Gonzalo.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 16, 2008 11:04 pm 
Expert
Expert

Joined: Mon Nov 26, 2007 2:29 pm
Posts: 443
Intenta un "saveOrUpdate" antes del flush.

_________________
Gonzalo Díaz


Top
 Profile  
 
 Post subject: updating
PostPosted: Thu Jan 17, 2008 3:56 pm 
Newbie

Joined: Tue Jan 01, 2008 1:48 pm
Posts: 8
Finally i managed to find out a solution, i hope it helps someone:

In the the mapping file ,its useless set the mutable property
to true o false, i just erased it and it worked, i just spent one week to
figure this out.


<class name="modelo.pojo.WebUsuario" table="WebUsuario" mutable="true" dynamic-update="true">


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.