Hibernate将希腊字符插入Oracle

时间:2017-01-13 00:36:15

标签: oracle hibernate special-characters

我需要在Oracle中插入希腊字符,例如'φ'。我现有的数据库结构不支持它。在调查发现各种解决方案时,我采用了使用NCLOB而不是CLOB的解决方案。当我使用unicode,03A6代表'φ'时,它工作得非常好,并且在SQL编辑器中使用UNISTR函数来插入。如下所示。

UPDATE配置设置CLOB = UNISTR('\ 03A6')

然而,当我尝试使用hibernate通过我的应用程序插入字符时,它失败了。在调试时,我发现插入前的字符串是'\ u03A6'。插入后,我将其视为¿。

有人可以帮我解决这个问题吗?我如何使用UNISTR?

PN:我不使用任何原生sqls或hqls。我使用表的实体对象。

修改

使用的Hibernate版本是3.5.6。无法更改版本,因为有很多其他依赖于此的插件。因此,不能在Hibernate Entity中的字段上使用 @Nationalized @Type(type =“org.hibernate.type.NClobType”)

1 个答案:

答案 0 :(得分:0)

在对不同的文章绞尽脑汁并尝试了很多选项后,我终于决定稍微调整一下我的代码来处理这个问题,而不是通过hibernate或Oracle DB。

在插入数据库之前,我会识别字符串中的unicode字符并对其进行格式化,以便在开头添加&#x,在结尾添加;。此编码字符串将在其符合UTF-8的UI(JSP,HTML)中显示其实际unicode。以下是代码。

Formatter formatter = new Formatter();
    for (char c : text.toCharArray()) {
        if (CharUtils.isAscii(c)) {
            formatter.format("%c", c);
        } else {
            formatter.format("&#x%04x;", (int) c);
        }
    }

    String result = formatter.toString();

例如:

String test = "ABC \uf06c DEF \uf06cGHI";

将格式化为

test = "ABC  DEF GHI";

在UI中呈现此字符串(甚至在word doc中),它将其显示为

ABC  DEF GHI

我尝试使用各种unicode字符,但效果很好。