UTF – 8 com JPA e Glassfish 4.0

Estou tendo dificuldades com os caracteres UTF-8. Este é um projeto simples do JSF. Eu uso o JSF 2.2 e o Glassfish 4.0

Eu tenho um método para onde eu vou:

em.persist(user); 

Quando eu depurar

 user.getName() 

Nesse ponto, posso ver os caracteres utf-8 no meu IDE. Também guardo a string em uma session – bean e também posso vê-los no navegador.

Apenas quando eles são persistidos para DB, eles são persistidos como: ?????

Eu também posso editar o DB e salvar os caracteres utf-8. O que quero dizer é que minha configuração de SQL é boa para o UTF-8.

O problema está em algum lugar no JPA.

Isso é o que eu tentei: (todos juntos:)

persistence.xml

    fus com.tugay.fup.core.model.User      

Este é o glassfish-web.xml:

    

E estou usando o EntityManager gerenciado pelo contêiner (tipo de transação = JTA)

Então nos pools de conexão JDBC no Glassfish eu tenho:

 jdbc:mysql://localhost:3306/fus?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8 

para: property: URL …

No entanto, nada disso ajuda.

Caracteres fixos não persistiram corretamente.

Ao usar o Glassfish, você pode definir essas propriedades como adicionais aos seus pools de conexão JDBC. Localize e visualize sua conexão de database em Administração da Web (Recursos-> JDBC Connection Pools-> your.connection). Na aba de propriedades adicionais, adicione (se ainda não houver) as propriedades mencionadas e reinicie o servidor:

 //name, value characterEncoding, UTF-8 characterSetResults, UTF-8 useUnicode, true 

O resultado será o mesmo se os parâmetros forem adicionados ao URL, mas isso é uma solução mais sustentável na minha opinião.

Isso resolveu:

jdbc: mysql: // localhost: 3306 / fus? useUnicode = true & characterEncoding = UTF-8 & characterSetResults = UTF-8

então isso estava errado:

jdbc: mysql: // localhost: 3306 / fus? useUnicode = true & connectionCollation = utf8_general_ci & characterSetResults = utf8