Por qué necesito la línea "session.save (user);" en el siguiente fragmento de código? Pensé que, con la llamada a buscar, el usuario ya estaba conectado a la sesión y los cambios se registrarían y confirmarían. ¿Te importaría explicar los detalles por mí? ¿O necesito una configuración especial u otras circunstancias en las que podría haber escuchado acerca de esta 'función'?¿Por qué tengo que guardar explícitamente después de un hallazgo con Hibernate?
session = createSession();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
// find one user
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
user.setName("Rocker!");
// ### HERE ###
// WHY this 'save' is necessary!!??
session.save(user);
ta.commit();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
assertEquals("Rocker!", user.getName());
ta.commit();
ACTUALIZACIÓN 1
La misma cuestión se aplica a
- session.save (usuario);
- user.setName ("Rocker!");
- ta.commit();
ACTUALIZACIÓN 2
La solución al problema es: Estoy utilizando guice/urdimbre persisten. Y en algunos casos me vincularon incorrectamente un bloque de código a una transacción a través de @Transactional: por lo tanto, la transacción se realizó demasiado pronto y, por lo tanto, el cambio por separado no se incluyó en la confirmación. ¡Gracias chicos! Por lo tanto, siempre asegúrese de que sabe acerca de su ámbito de transacción en caso de que esté utilizando primavera o guice ...
¿Has activado el registro de hibernación para examinar qué ocurre entre el retorno de uniqueresult() y commit()? –
Siempre lo hice con ese 'guardado' explícito de los últimos meses con hibernación. hasta hoy: donde pregunté esto yo mismo. Echaré un vistazo a los registros. Pero mira mi edición debajo del código: el guardado explícito también es necesario después de que ya llamé al guardado – rocker
cuando algo funciona durante mucho tiempo "hasta hoy" y el código no ha cambiado, implica que alguna configuración en otro lugar ha cambiado: ser asegúrese de revisar qué ha cambiado exactamente en todo el proyecto/aplicación desde el último estado de trabajo conocido. Obviamente las cosas no solo dejan de funcionar. –