java - UTF-8 与 JPA 和 Glassfish 4.0

标签 java mysql hibernate jpa glassfish

我在使用 UTF-8 字符时遇到困难。这是一个简单的 JSF 项目。我使用 JSF 2.2 和 Glassfish 4.0

我有一个方法:

em.persist(user);

调试时

user.getName()

此时,我可以在我的 IDE 中看到 utf-8 字符。此外,我将字符串保存在 session bean 中,我也可以在浏览器上看到它们。

只有持久化到DB时,才持久化为:??????

我也可以自己编辑数据库并保存 utf-8 字符。我的意思是,我的 SQL 配置适用于 UTF-8。

问题出在 JPA 的某处。

这是我尝试过的:(全部一起:)

持久性.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="Persistence" transaction-type="JTA">
        <jta-data-source>fus</jta-data-source>
        <class>com.tugay.fup.core.model.User</class>
        <properties>
            <property name="javax.persistence.jdbc.url"
                  value="jdbc:mysql://localhost:3306/fus?useUnicode=yes&amp;characterEncoding=UTF-8"/>
        </properties>
    </persistence-unit>
</persistence>

这是 glassfish-web.xml:

<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8"/>
</glassfish-web-app>

我正在使用由容器管理的 EntityManager(事务类型 = JTA)

所以在 Glassfish 的 JDBC 连接池中我有:

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

对于:属性:URL...

但是这些都没有帮助。

静态字符未正确保留。

最佳答案

使用 Glassfish 时,您可以将这些属性设置为 JDBC 连接池的附加属性。在 Web 管理中找到并查看您的数据库连接(Resources->JDBC Connection Pools->your.connection)。在其他属性选项卡中添加(如果还没有)提到的属性并重新启动您的服务器:

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

如果将参数添加到 URL,结果将是相同的,但我认为这是更易于维护的解决方案。

关于java - UTF-8 与 JPA 和 Glassfish 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19189721/

相关文章:

java - 在 PLSQL Oracle 中抛出特定的错误消息...进入 hibernate 状态?

java - 如何在主线程中为循环中启动的线程定义会合点?

java - 序列化:将对象作为 URL 参数传递并提取值

java - java查找两个整数数组中的共同元素

java - 样式中定义的 textColor 未应用于按钮文本

mysql - 为了授予我错误 1064 (42000)

php - 在连接字段中以任意顺序过滤具有多个单词的 mySQL 数据库

mysql - Hibernate/MySQL 并发问题

mysql - 帮助 mysql 触发器(插入前检查值)

java - 为什么 mysql 不识别其 LONGTEXT 数据类型上的 Unicode 字符?