Foros del Web » Programación para mayores de 30 ;) » Java »

ayuda con hibernate

Estas en el tema de ayuda con hibernate en el foro de Java en Foros del Web. intento modificar el valor de la llave primaria de una tabla , pero hibernate lanzo el siguiente error identifier of an instance of Pruebas was ...
  #1 (permalink)  
Antiguo 27/01/2009, 22:01
 
Fecha de Ingreso: febrero-2007
Mensajes: 39
Antigüedad: 17 años, 2 meses
Puntos: 0
ayuda con hibernate

intento modificar el valor de la llave primaria de una tabla , pero hibernate lanzo el siguiente error

identifier of an instance of Pruebas was altered from 2 to 5

es decir que no se puede modificar.

como puedo solucionar esto, o me falta algun atributo en el archivo de mapeo para poder modificar la llave primaria?

el archivo de mapeo es:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//hibernate/hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Pruebas" table="pruebas">
<id name="id" column="id" unsaved-value="-1" type="java.lang.String">
<generator class="assigned"/>
</id>
<property name="nombre" column="nombre" type="string"/>
</class>
</hibernate-mapping>

ayuda!
  #2 (permalink)  
Antiguo 27/01/2009, 22:53
 
Fecha de Ingreso: mayo-2007
Mensajes: 210
Antigüedad: 17 años
Puntos: 8
Respuesta: ayuda con hibernate

Una vez tube esa duda revisando la documentacion de hibernate encontre que no se puede cambiar la clave primaria.

salu2
  #3 (permalink)  
Antiguo 27/01/2009, 22:58
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: ayuda con hibernate

Las llaves primarias no se pueden modificar en hibernate.

Una manera de "modificar" una llave primaria, es eliminando el objeto en cuestión, creando uno nuevo a partir del anterior y asignándole un nuevo id.

Si no tienes ninguna clase asociada a esa, entonces este método funciona. Si no es así, entonces tienes que re-asignar todos los objetos del objeto viejo al objeto nuevo.

De todas maneras, si tienes que modificar una llave primaria, entonces ese atributo no debería ser llave primaria.
  #4 (permalink)  
Antiguo 27/01/2009, 23:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 39
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: ayuda con hibernate

vale gracias por sus respuestas prontas..

en mi proyecto debe ser flexible el cambio de valor de la llave primaria. bueno investigue y tampoco encuentro la solucion.

entonces hibernate no deja modificar el PK.. puede existir otra solucion?
  #5 (permalink)  
Antiguo 28/01/2009, 01:28
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: ayuda con hibernate

Como dice Tolaware, si tienes que modificar un campo, ese campo no debería ser clave primaria. A veces es suficiente con que sea clave única, y dejar como clave primaria un campo que que no haya que modificar nunca.

Modificar las claves primarias suele dar muuuuuchos dolores de cabeza, sobre todo si hay relaciones de por medio, y si encima se usan en otras tablas como parte de claves múltiples, ya la repanocha .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 27/09/2010, 16:59
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ayuda con hibernate

Una forma con la que yo pude solucionar el problema es utilizando un preparedStatement, no es la forma correcta de utilizar hibernate pero me rindio bastante bien....

mi caso estaba asi....:

session.beginTransaction();
PreparedStatement sta = session.connection().prepareStatement(""
+ "update documento set doc_numero = ? where doc_numero = ?");
sta.setString(1, nuevo);
sta.setString(2, doc.getDocNumero());
int res = sta.executeUpdate();
...........
session.getTransaction().commit();
  #7 (permalink)  
Antiguo 15/02/2013, 16:40
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: ayuda con hibernate

usen el evit(objetoPersistente)

y listo.....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:39.