2017-05-30 31 views
0

多言語データベースに次の問題があります。私はデータベースごとに言語ごとのプロパティファイルを格納する必要がありました。エンティティのCLOBデータ型とエンティティのStringフィールドを使用しました。java.util.Propertiesを@PrePersistと@PreUpdateのStringに変換していました。@PostLoadでは、これを文字列からプロパティに戻しました。これはドイツ語のローカリゼーションには問題ありませんでしたが、フランス語では機能しませんでした。私が、私は特別なフランス語の文字をエスケープしようとしたし、その後CLOBは、私の視点から、大丈夫だったどこにでもJPA CLOBから文字列へのunescapeフランス語文字

@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); 
    } 
} 

ISO8859-1エンコーディングを使用していますことを、おそらく言及する価値があります。しかし、エンティティにデータをロードするとき、JPAは文字をエスケープして、フランス語の文字を台無しにしました。

エンティティ内のclobとcolumnをbyte []配列に変更することで問題を解決しました。これにより、この問題を回避し、Properties.load(InputStream stream)メソッドを使用してエスケープすることができました。フランス語の文字でもOKです

私の質問は、DB内のclobを維持することによって管理します(明らかにそれが何を含むかなどがわかります)。私はJPAを強制するか、クローブからストリングにデータを書き込むときにエスケープ文字をエスケープしないように休止する必要があります。いくつかの構成プロパティがありますか?

答えて

1

てみ

JDBCデータソースのようなURLにエンコーディングを追加します。mysql://127.0.0.1:3306/databaseNameのcharacterEncoding = ISO8859-1ところで

、ベストプラクティスは、UTF-8を使用することです?エンコーディング。あなたのアプリをUTF-8に変換することを検討してください。

+0

良い点ですが、残念ながら私はこのソリューションを使用できません。私はブロブとバイト配列 –

+0

につきましたが、それはプロパティロードの問題ではなかった、BLOB値が暗黙的に文字列に変換されたときに問題が発生しました –

関連する問題