JPA unescape法语字符从CLOB到String列

时间:2017-05-30 11:30:38

标签: hibernate jpa escaping iso-8859-1 french

我有多语言数据库的问题。我需要将每种语言的属性文件存储到数据库中。我在它中使用了CLOB数据类型和实体中的String字段,我在@PrePersist和@PreUpdate上将java.util.Properties转换为String,在@PostLoad中我将它从字符串转换回属性。这对德国本地化来说很好,但不适用于法语。值得一提的是我到处使用ISO8859-1编码

@Lob
// length is there only for hypersonic sql (junit tests), otherwise clob(255) is generated
@Column(name = "PROPERTIES_BLOB", length = 65536, nullable = false)
private String blob;

@Transient
private Properties properties;

@PostLoad
public void postLoad() throws IOException
{
    try (StringReader reader = new StringReader(blob))
    {
        this.properties = new Properties();
        this.properties.load(reader);
    }
}

我试过逃避特殊的法国角色然后从我的观点来看clob很好。但是,当我将数据加载到实体时,JPA确实忘掉了字符并搞砸了法语字符。

我已经通过将实体中的blob和blob转换为byte []数组来解决了这个问题,这使我能够解决这个问题,并使用Properties.load(InputStream流)方法解决问题,甚至是法国人物

然而,我的问题是如何通过将clob保存在DB中来管理它(它清楚地显示它包含的内容等等)。当从clob到string写入数据时,我需要强制JPA或hibernate不要使用unescape字符。它有一些配置属性吗?

1 个答案:

答案 0 :(得分:1)

尝试将编码添加到数据源网址,如

JDBC:MySQL的://127.0.0.1:3306 /的databaseName的characterEncoding = ISO8859-1

顺便说一句,最佳做法是使用UTF-8编码。考虑将您的应用转换为UTF-8