#java #hibernate #jpa #spring-data-jpa
#java #впасть в спящий режим #jpa #весна-данные-jpa
Вопрос:
Мы собираем данные из документов, и иногда мы собираем больше, чем можем сохранить в нашей базе данных. Я хотел бы иметь возможность выполнять автоматическое усечение всех объектов для строковых значений, я не хочу, чтобы транзакции завершались неудачно из-за:
Could not process protect job; exception=org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:261)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:223) ...
Я хочу сделать все это в одном месте. В настоящее время мой подход заключается в использовании отражения внутри перехватчика: org.hibernateEmptyInterceptor
для усечения любых String
членов, но я хотел бы избежать необходимости делать это, если для этого уже есть решение, для которого не нужно то, что похоже на кувалду.
Мы продолжаем получать эту ошибку, всплывающую во всех местах, и мы действительно не заботимся о потере некоторых данных, и я хотел бы остановить это раз и навсегда. Но я не хочу редактировать каждый отдельный параметр, который мы должны выполнять усечение для каждого Entity
, если у меня его тоже нет, поскольку я считаю, что мы легко забудем сделать это где-нибудь где-нибудь. Я рассматривал другие подходы, но большинство из них вращаются вокруг проверки, чего я не хочу. Я не хочу выдавать ошибку проверки, я хочу усечь.
Комментарии:
1. Вы пробовали создать конвертер атрибутов?
2. Привет, спасибо, это может быть вариант, я попробую это сделать.
3. Вы можете создать пользовательский прослушиватель сущностей vladmihalcea.com/hibernate-event-listeners , будет применен ко всем сущностям в одной точке. Но предположим, вам все равно потребуется отражение, чтобы получить длину столбца (из значения аннотации? ) и обрезать строки.
4. Вы уверены, что ошибка связана с размером данных, я думаю, она должна вызывать исключение MySQL DataException и в oracle SQLException, исключение DataIntegrityViolationException больше для проблем с PK и FK, вы не пытаетесь вставить объект вместо его обновления?