JPA EntityManager and character encoding

This is my first time creating a simple site with JSPs, Servlets, Tomcat Server, MySQL and Netbeans (if that helps).

Thanks to JPA EntityManager , I can insert data into my database like this:

    EntityManager entityManager = Persistence.createEntityManagerFactory("test").createEntityManager();
    entityManager.getTransaction().begin();
    entityManager.persist(usr);
    entityManager.getTransaction().commit();

      

Where usr is the user of the Entity class created thanks to Netbeans. Everything works fine except for the fact that it doesn't support characters like accents.

Assuming I want to insert the word "cliché":

  • If I try to print a value from my User class, everything is fine.
  • When a value is submitted, if I try to select a value from my base, I have strange characters instead of "é"

The database fields are utf8_unicode_ci . If I try to do a simple INSERT query from MySQL like

INSERT INTO table (name) VALUES("ééé");

      

it works fine.

As I read on some websites, I changed my persistence.xml to the following line:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;zeroDateTimeBehavior=convertToNull"/>

      

but the result is the same.

EDIT: Here are the properties of my User Class

@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
    @NamedQuery(name = "Users.findByIdUsers", query = "SELECT u FROM Users u WHERE u.idUsers = :idUsers"),
    @NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
    @NamedQuery(name = "Users.findByPasswd", query = "SELECT u FROM Users u WHERE u.passwd = :passwd"),
    @NamedQuery(name = "Users.findByFirstName", query = "SELECT u FROM Users u WHERE u.firstName = :firstName"),
    @NamedQuery(name = "Users.findByLastName", query = "SELECT u FROM Users u WHERE u.lastName = :lastName"),
    @NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),
    @NamedQuery(name = "Users.findByEmailAndPwd", query = "SELECT u FROM Users u WHERE u.email = :email AND u.passwd = :passwd")})
public class Users implements Serializable {
    @Basic(optional = false)
    @Column(name = "address")
    private String address;
    @Basic(optional = false)
    @Column(name = "city")
    private String city;
    @Basic(optional = false)
    @Column(name = "postal")
    private String postal;
    @Basic(optional = false)
    @Column(name = "phone")
    private String phone;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idUsers")
    private Integer idUsers;
    @Basic(optional = false)
    @Column(name = "username")
    private String username;
    @Basic(optional = false)
    @Column(name = "passwd")
    private String passwd;
    @Basic(optional = false)
    @Column(name = "firstName")
    private String firstName;
    @Basic(optional = false)
    @Column(name = "lastName")
    private String lastName;
    @Basic(optional = false)
    @Column(name = "email")
    private String email;

      

As I read online, I also tried to modify my catalina.bat by adding the following lines, but it didn't change anything.

set JAVA_OPTS =% JAVA_OPTS% -Djavax.servlet.request.encoding = UTF-8 -Dfile.encoding = UTF-8

Any help is greatly appreciated.

+3


source to share


3 answers


I was able to fix my problem thanks to the VGR answer here: HttpServletRequest UTF-8 Encoding



Many thanks for your help.

0


source


You can add unicode encoding filter to web.xml:

  <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
     </init-param>
  </filter>

      



if you are using Spring you can use the org.springframework.web.filter.CharacterEncodingFilter class to encode all requests, otherwise you must use a different encoding class.

0


source


try adding this config to your persistence.xml file

<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.charSet">UTF-8</property> 

      

-1


source







All Articles