Автоматическое усечение в спящем режиме JPA

#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, вы не пытаетесь вставить объект вместо его обновления?