Hibernate ошибка преобразования MySQL JSON UTF8

191
25 июля 2018, 20:30

Для расширения типов Hibernate использую vladmihalcea/hibernate-types

@Entity
@TypeDef(
    name = "jsonb-node", 
    typeClass = JsonStringType.class
)
public class Catalog {
...
@Type( type = "jsonb-node" )
    @Column(columnDefinition = "json")
    public ArrayNode tags;
}

При преобразовании JSON объекта из MySQL в ArrayNode, символы UTF8 преобразуются не корректно

List<Catalog> catalog = em.createNativeQuery(
            "select * "
            + "from Catalog c "
            + "where name  regexp('"+nameRegExpr+"*') "
            + "and isTemplate=true"
            ,Catalog.class
        )
        .getResultList();

В результате получаю строку вида {"key":"??????????"}

Байты строки 7B226B6579223A223F3F3F3F3F3F3F3F3F3F227D

Исходные данные в MySQL хранятся правильно

[ { "key" : "новый" } ]

Байты 5b0a097b0a0909226b657922203a2022d0bdd0bed0b2d18bd0b9220a097d0a5d

Как правильно настроить преобразование типов?

UPD. Настройки подключения Hibernate

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
  <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 
        <property name="hibernate.hbm2ddl.auto" value="update" /> 
    </properties>
  </persistence-unit>
</persistence>
READ ALSO
Проблема с XML и отрисовкой чего-либо с него

Проблема с XML и отрисовкой чего-либо с него

У меня есть самый простой, насколько это возможно, XML-файл

178
ACTION_FOUND Broadcast inside bound service

ACTION_FOUND Broadcast inside bound service

Мне необходимо выполнить поиск bluetooth устройств внутри привязанной службы (bounded service) с помощью функции startdiscoveryДля этого надо установить broadcast...

197
Как работает метод flush() в spring-data-jpa?

Как работает метод flush() в spring-data-jpa?

Есть проект на стеке spring-boot-20

261
Задать формат времени в часах

Задать формат времени в часах

Пишу приложения для часов

162