Spring Boot + JPA [Hibernate backed] + mysql = Усечение данных: слишком длинные данные для столбца «ATTRIBUTE_NAME» в строке 1

0

Ошибка возникает при попытке выполнить оператор вставки для базы данных mysql. Я включил трассировку sql args для hibernate, чтобы точно увидеть, что действие переводит на запрос, а также на привязки.

В базе данных mysql столбец ATTRIBUTE_NAME имеет значение VARCHAR (200)... глядя на отслеживаемые журналы, я вижу строку длиной 79 символов ("org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN").

Ниже приведены журналы - пожалуйста, укажите мне правильное направление, так как это немного смущает меня. Найдите "Ошибка SQL: 1406, SQLState: 22001" и прочитайте запись перед этим.

    The attr: org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN
 and the length: 79
The attr: SPRING_SECURITY_CONTEXT
 and the length: 23
2019-02-07 09:07:50.761 DEBUG 18764 --- [nio-8998-exec-8] org.hibernate.SQL                        : select CODE_NAMEse0_.id as id1_16_, CODE_NAMEse0_.EXPIRY_DATE as EXPIRY_D2_16_, CODE_NAMEse0_.INACTIVE_INTERVAL_MIN as INACTIVE3_16_, CODE_NAMEse0_.SESSION_TYPE as SESSION_4_16_, CODE_NAMEse0_.SESSION_ID as SESSION_5_16_, CODE_NAMEse0_.START_DATE as START_DA6_16_, CODE_NAMEse0_.username as username7_16_ from CODE_NAME_SESSION CODE_NAMEse0_ where CODE_NAMEse0_.username=?
2019-02-07 09:07:50.761 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [0835623872]
2019-02-07 09:07:50.770 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_16_] : [BIGINT]) - [474]
2019-02-07 09:07:50.770 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([EXPIRY_D2_16_] : [TIMESTAMP]) - [2019-02-07 09:11:40.0]
2019-02-07 09:07:50.770 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([INACTIVE3_16_] : [BIGINT]) - [5]
2019-02-07 09:07:50.771 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([SESSION_5_16_] : [VARCHAR]) - [67898350-7858-4de1-8e45-e6545768b875]
2019-02-07 09:07:50.771 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([START_DA6_16_] : [TIMESTAMP]) - [2019-02-07 09:06:40.0]
2019-02-07 09:07:50.771 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([username7_16_] : [VARCHAR]) - [0835623872]
2019-02-07 09:07:50.771 DEBUG 18764 --- [nio-8998-exec-8] org.hibernate.SQL                        : select CODE_NAMEse0_.CODE_NAME_SESSION_ID as CODE_NAME4_17_0_, CODE_NAMEse0_.id as id1_17_0_, CODE_NAMEse0_.id as id1_17_1_, CODE_NAMEse0_.ATTRIBUTE_NAME as ATTRIBUT2_17_1_, CODE_NAMEse0_.ATTRIBUTE_VALUE as ATTRIBUT3_17_1_, CODE_NAMEse0_.CODE_NAME_SESSION_ID as CODE_NAME4_17_1_ from CODE_NAME_SESSION_ATTRIBUTE CODE_NAMEse0_ where CODE_NAMEse0_.CODE_NAME_SESSION_ID=?
2019-02-07 09:07:50.771 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [BIGINT] - [474]
2019-02-07 09:07:50.773 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_17_1_] : [BIGINT]) - [1410]
2019-02-07 09:07:50.774 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([ATTRIBUT2_17_1_] : [VARCHAR]) - [SPRING_SECURITY_CONTEXT]
2019-02-07 09:07:50.776 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([ATTRIBUT3_17_1_] : [VARBINARY]) - [org.springframework.security.core.context.SecurityContextImpl@2ec961af: Authentication: za.co.intellimali.CODE_NAME.security.AuthenticationToken@2ec961af: Principal: za.co.intellimali.CODE_NAME.domain.CODE_NAMESession@7552b3f3; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_MEAL, ROLE_ACCOM, ROLE_STU, MEMBER]
2019-02-07 09:07:50.776 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([CODE_NAME4_17_1_] : [BIGINT]) - [474]
2019-02-07 09:07:50.776 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([CODE_NAME4_17_0_] : [BIGINT]) - [474]
2019-02-07 09:07:50.777 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_17_0_] : [BIGINT]) - [1410]
2019-02-07 09:07:50.780 DEBUG 18764 --- [nio-8998-exec-8] org.hibernate.SQL                        : insert into CODE_NAME_SESSION_ATTRIBUTE (ATTRIBUTE_NAME, ATTRIBUTE_VALUE, CODE_NAME_SESSION_ID) values (?, ?, ?)
2019-02-07 09:07:50.780 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN]
2019-02-07 09:07:50.780 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARBINARY] - [org.springframework.security.web.csrf.DefaultCsrfToken@6f0adee5]
2019-02-07 09:07:50.780 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [BIGINT] - [474]
2019-02-07 09:07:50.791  WARN 18764 --- [nio-8998-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1406, SQLState: 22001
2019-02-07 09:07:50.792 ERROR 18764 --- [nio-8998-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : Data truncation: Data too long for column 'ATTRIBUTE_NAME' at row 1
2019-02-07 09:07:50.805 DEBUG 18764 --- [nio-8998-exec-8] org.hibernate.SQL                        : select CODE_NAMEse0_.id as id1_16_, CODE_NAMEse0_.EXPIRY_DATE as EXPIRY_D2_16_, CODE_NAMEse0_.INACTIVE_INTERVAL_MIN as INACTIVE3_16_, CODE_NAMEse0_.SESSION_TYPE as SESSION_4_16_, CODE_NAMEse0_.SESSION_ID as SESSION_5_16_, CODE_NAMEse0_.START_DATE as START_DA6_16_, CODE_NAMEse0_.username as username7_16_ from CODE_NAME_SESSION CODE_NAMEse0_ where CODE_NAMEse0_.SESSION_ID=?
2019-02-07 09:07:50.806 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [67898350-7858-4de1-8e45-e6545768b875]
2019-02-07 09:07:50.807 TRACE 18764 --- [nio-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_16_] : [BIGINT]) - [474]

Стол: Изображение 174551

Рассматриваемая переменная на стороне Java:

@Column(name = "ATTRIBUTE_NAME")
private String attributeName;

Я должен упустить что-то очевидное...

РЕДАКТИРОВАТЬ: что я беру с Wireshark

    insert into CODE_NAME_SESSION_ATTRIBUTE (ATTRIBUTE_NAME, ATTRIBUTE_VALUE, CODE_NAME_SESSION_ID) 
values 
(
    'org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN'
    , _binary'..\0.sr\06org.springframework.security.web.csrf.DefaultCsrfTokenZ.../....\0.L\0\nheaderNamet\0.Ljava/lang/String;L\0\rparameterNameq\0~\0.L\0.tokenq\0~\0.xpt\0.X-CSRF-TOKENt\0._csrft\0$04735f03-57cf-4984-860c-e8e03400d432'
    , 474);
    ....~.#22001Data too long for column 'ATTRIBUTE_NAME' at row 1  ....rollback................SET autocommit=1................SET autocommit=0................commit................SET autocommit=1................SET autocommit=0................select CODE_NAMEse0_.id as id1_16_, CODE_NAMEse0_.EXPIRY_DATE as EXPIRY_D2_16_, CODE_NAMEse0_.INACTIVE_INTERVAL_MIN as INACTIVE3_16_, CODE_NAMEse0_.SESSION_TYPE as SESSION_4_16_, CODE_NAMEse0_.SESSION_ID as SESSION_5_16_, CODE_NAMEse0_.START_DATE as START_DA6_16_, CODE_NAMEse0_.username as username7_16_ from CODE_NAME_SESSION CODE_NAMEse0_ where CODE_NAMEse0_.SESSION_ID='36c6cb34-aa46-4821-b3a4-15e80c7c57fa'

Вышеупомянутое при запуске в mysql workbench будет работать с предупреждением и урезать ATTRIBUTE_NAME до 'org.springframework.security.web.csrf.HttpSessionC'

если я бегу:

    insert into CODE_NAME_SESSION_ATTRIBUTE (ATTRIBUTE_NAME, ATTRIBUTE_VALUE, CODE_NAME_SESSION_ID) 
values 
(
    'CSRF_TOKEN'
    , _binary'..\0.sr\06org.springframework.security.web.csrf.DefaultCsrfTokenZ.../....\0.L\0\nheaderNamet\0.Ljava/lang/String;L\0\rparameterNameq\0~\0.L\0.tokenq\0~\0.xpt\0.X-CSRF-TOKENt\0._csrft\0$04735f03-57cf-4984-860c-e8e03400d432'
    , 474);

Работает без предупреждения, показывая, что таблица не принимает большую длину для ATTRIBUTE_NAME. Я чувствую, что это проблема MySQL, а не Java + Spring + JPA

  • 0
    Вы можете поделиться кодом, который вставляет данные в БД
  • 0
    entitymanager.persist ()
Показать ещё 8 комментариев
Теги:
hibernate
spring-data-jpa

2 ответа

0

Antoniosss Query: ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ youtTableName

Это привело меня к проблеме. Это было из-за ниже:

Первоначально с помощью весенней сессии использовался их скрипт, который создал таблицу с именем SPRING_SESSION_ATTRIBUTE... теперь мы изменили эту таблицу, чтобы добавить больше функциональности и имени, но в dev мы все еще имеем ее в качестве копии (следует удалить ее). По привычке я меняю значение там и фиксирую, когда таблица, которую я должен был изменить, была вовсе не той, а нашей пользовательской таблицей.

  • 0
    Пометьте это как ответ, поскольку Антониосс удалил свой пост, поэтому не может пометить.
0

Как вы можете видеть в журналах

o-8998-exec-8] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([ATTRIBUT3_17_1_] : [VARBINARY]) - [org.springframework.security.core.context.SecurityContextImpl@2ec961af: Authentication: za.co.intellimali.CODE_NAME.security.AuthenticationToken@2ec961af: Principal: za.co.intellimali.CODE_NAME.domain.CODE_NAMESession@7552b3f3; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_MEAL, ROLE_ACCOM, ROLE_STU, MEMBER]

Фаар за пределами вашего предела 200.

Похоже, что вы передаете весь объект безопасности, который получает toString ified вместо ожидаемого имени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню