Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle 11g中使用JPA存储unicode字符_Jpa_Unicode_Oracle11g - Fatal编程技术网

在Oracle 11g中使用JPA存储unicode字符

在Oracle 11g中使用JPA存储unicode字符,jpa,unicode,oracle11g,Jpa,Unicode,Oracle11g,我在使用JPA将unicode字符存储到Oracle 11g时遇到问题。 当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象) 然后字符串显示为一个倒“?”(“?”) 当我使用SQLDeveloper手动修复数据库中损坏的字符串时,字符将按照预期正确显示 我已经搜索了一些,当,只有一个小的修改是需要纠正这一点。我觉得我在这篇文章上也有同样的问题,只是我用的是Oracle11g。有人知道oracle 11g中解决此问题的方法吗?提前谢

我在使用JPA将unicode字符存储到Oracle 11g时遇到问题。 当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象)

然后字符串显示为一个倒“?”(“?”)

当我使用SQLDeveloper手动修复数据库中损坏的字符串时,字符将按照预期正确显示

我已经搜索了一些,当,只有一个小的修改是需要纠正这一点。我觉得我在这篇文章上也有同样的问题,只是我用的是Oracle11g。有人知道oracle 11g中解决此问题的方法吗?提前谢谢

这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="cbpejb" transaction-type="JTA">
    <class>entity.Translation</class>
    <properties>
        <property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver" />
        <property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcldb" />
        <property name="openjpa.ConnectionUserName" value="dev" />
        <property name="openjpa.ConnectionPassword" value="dev00" />
        <property name="openjpa.jdbc.Schema" value="DEV" />
    </properties>
</persistence-unit>

实体翻译

有两个可能的问题:

  • 您选择了错误的数据库列类型(例如:db列/配置不支持多字节字符)。在Oracle中,您需要
  • 您选择了正确的列类型,但未正确显示它

  • 就Java本身而言,String类支持Unicode,并使用UTF-16编码,但是您的JDBC驱动程序应该能够处理en/解码

    @gerrytan感谢您的回复,我已经使用columnDefinition=“NVARCHAR2(2000)”选择了正确的字符类型NVARCHAR2,如果我在数据库中手动输入它,它确实会正确显示。问题似乎是数据在从java存储到oracle时被破坏了。我注意到有一条警告建议我使用OraclePreparedStatement.setFormOfUse(),但我不知道如何将其与JPA一起使用。您知道如何将OraclePreparedStatement.setFormOfUse()用于JPA吗?
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0"
        xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="cbpejb" transaction-type="JTA">
        <class>entity.Translation</class>
        <properties>
            <property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver" />
            <property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcldb" />
            <property name="openjpa.ConnectionUserName" value="dev" />
            <property name="openjpa.ConnectionPassword" value="dev00" />
            <property name="openjpa.jdbc.Schema" value="DEV" />
        </properties>
    </persistence-unit>