2010-12-10 18 views
5

Estoy utilizando Spring Hibernate con HibernateSupportDao, cuando trato de enviar varias filas de datos para almacenar en mi db, se levanta un DataIntegrityViolationException en una fila en particular. El mismo escenario ha funcionado en permanecer en la tarea en la misma tabla. No entiendo el problema incluso cuando uso el mismo código para la tarea actual. ¿Por qué se lanzó un DataIntegrityViolationException y cómo puedo rectificar eso?¿Cómo podemos resolver la DataIntegrityViolationException en Spring Hibernate?

Respuesta

6

Directly from the API:

excepción lanzada cuando un intento de insertar o actualizar datos en los resultados de violación de una restricción de integridad. Tenga en cuenta que esto no es un concepto puramente relacional; la mayoría de los tipos de bases de datos requieren claves primarias únicas.

Básicamente significa que hibernate intentó hacer algo, pero la base de datos generó una excepción. El caso más común podría ser que está eliminando un elemento primario pero no está eliminando un elemento secundario con una clave externa para ese elemento primario.

¿Cuál es su configuración de persistencia transitiva (es decir, en cascada)?

+0

aquí estoy utilizando Spring anatemáticas Annnate, y la relación entre las tablas, mantuve la relación ManytoOne con el modo fetch como EAGER. aquí un punto es cuando estoy trabajando en la misma tabla con alguna otra operación como, estoy obteniendo los datos de la tabla y haciendo algunas modificaciones cuando estoy enviando, los datos completos previos tienen que ser eliminados y los datos nuevos que se modifican son yendo a la tienda esta tarea se estaba ejecutando con éxito. en este caso también puedo agregar una nueva fila en la página. – Naresh

2

Cuando encuentre esta excepción al seleccionar algunos campos de la tabla, el motivo podría ser la longitud de uno de los campos en la instrucción de selección. verifique todas las longitudes de campo seleccionadas y compárelas con la descripción de la tabla. cualquier campo habría violado la restricción de campo.

1

DataIntegrityViolationException también puede estar violando una restricción única en la base de datos (es decir, una clave alternativa). Compruebe si las filas de datos insertados contienen datos duplicados que violan una restricción tan única.

+0

Pregunta sobre esto. ¿Es una buena práctica manejar validaciones duplicadas de db y no de la aplicación en sí? – jscherman

+0

puede ser ambos, pero solo DB sabe que está duplicado o no en ese momento. ¿Cómo manejarías la validación en la aplicación sin db? – Sarief

0

si importa la base de datos de alguna parte, entonces tienen que tomar los datos carpeta del servidor también, y cambiar esta datos carpeta a carpeta de datos del servidor.

0

Trato DataIntegrityViolationException en ExceptionInfoHandler, buscando incidencias de restricciones de base de datos en el mensaje de causa de origen y lo convierto en un mensaje i18n a través del mapa . Vea el código aquí: https://stackoverflow.com/a/42422568/548473

Cuestiones relacionadas