Ver Mensaje Individual
  #11 (permalink)  
Antiguo 11/11/2013, 09:08
Avatar de Fuzzylog
Fuzzylog
 
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Hibernate - Consulta sobre

En hibernate se manejan entidades que son reflejos de las tablas de la base de datos con las que trabajamos.

Una entidad (objeto java) tiene que tener los mismos tipos de datos que las columnas con las que trabaja. El mapeo (hbm) hace de enlace entre la entidad java y la base de datos.

De ahi que lo de cambiar el ID a Integer no es algo que se pueda hacer a la ligera, ya que tiene que estar en concordancia con el tipo de dato que se muestre en esa columna (hay tablas de equivalencias entre tipos de datos de una determinada BD y tipos de datos Java).

Por otra parte a la hora de guardar tienes varios métodos. Los que mas se usan son saveOrUptade (cuando puedes guardar o actualizar una entidad) y merge (cuando modificas solo unos valores y no quieres recuperar toda la entidad de BD para volver a guardar, ya que no procesa los datos null, al contrario que el método anterior.

En tu caso cuando haces un insert en la tabla "pedidos" te está intentando hacer un update en la tabla "detalle_pedidos".

Mira si el mapeo es correcto o en tu código estás intentando hacer un update de algo que no tiene por qué existir.

Por cierto, cuidado con modificar una entidad para procesarla internamente. Al hacer eso te la intenta actualizar en base de datos aunque no le digas que la guarde (por el tema de persistencia). Es por eso que en el procesamiento interno se usan los Dtos en vez de los Pojos o entidades.

Además, sobre todo en casos que tengas que procesar entradas en diferentes tablas durante un proceso transaccional, a veces es preciso realizar un flush de la sesión después de realizar un insert o update en la base de datos para que se sincronice el estado de la aplicación con el de la BD, ya que si no hibernate hace todas las comprobaciones seguidas para las diferentes tablas en vez de ir una por una en orden (con lo cual a lo mejor no se enteraría de que has hecho un insert).
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}