Специальные символы с JPA, JDBC и mysql
Я использую JPA
, JDBC
а также MySQL
для моего проекта Spring Boot. У меня проблемы с особыми персонажами. Если я пишу SQL-запрос через JdbcTemplate
Это просто отлично. Я могу вернуть символы "а". Но если это через JPA
эти символы -s.
Сортировка схемы по умолчанию - utf8_hungarian_ci, а набор символов по умолчанию - utf8.
мой application.properties
:
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url: jdbc:mysql://localhost:3306/databasename?useUnicode=yes&characterEncoding=UTF-8
spring.datasource.username: root
spring.datasource.password: password
У меня есть две таблицы, user
а также userroles
и они связаны с @ManyToMany
отношения с объединяемым
User.java
:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_userrole",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "userrole_id", referencedColumnName = "id"))
private List<UserRole> userRoles;
public List<UserRole> getUserRoles() {
return userRoles;
}
UserRole.java
:
@ManyToMany(mappedBy = "userRoles")
private List<User> users;
Когда я вызываю этот метод:
currentUser.getUserRoles();
все символы "á" заменяются на -s. Что мне не хватает?
РЕДАКТИРОВАТЬ:
Я добавил нового пользователя: árvíztűrő tükörfúrógép в базу данных. (Я мог бы сделать это без проблем, и, кстати, я тоже сохранил пользователя с помощью jpa.) Но когда я попытался войти в систему, я получил следующее исключение:
error":"Internal Server Error","exception":"java.io.CharConversionException"
,"message":"Not an ISO 8859-1 character: ű"
pom.xml
:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
2 ответа
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
с hibernate 4.3.1 это работает:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf-8</property>
Пожалуйста, добавьте ниже в веб-XML
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>