私たちのアプリケーションは weblogic 10g で実行されており、デフォルトの eclipselink 実装に裏打ちされた JPA を介して Oracle 9 データベースにデータを永続化します。
エンティティは単純です:
@Entity
@Table(name="PLUGINDATA")
@SequenceGenerator(name="plugin_seq", sequenceName="PLUGINDATASEQ", initialValue = 1000, allocationSize = 50)
public class PluginData implements Serializable {
@Column(name = "data", length = 4000, nullable = false)
private String data;
@PersistenceContext(unitName = "XYZ")
protected javax.persistence.EntityManager entityManager;
entityManager.persist(entity);
アクセント付き文字を含む文字列を渡すと、EJB では問題ありません。
83, 116, -59, -103, 101, 100, 111, -60, -115, 101, 115, 107, -61, -67, 32, 107, 114, 97, 106
しかし、それらはデータベースに破損して保存されています:
83, 116, 63, 63, 101, 100, 111, -60, 63, 101, 115, 107, 63, 63, 32, 107, 114, 97, 106
たとえば、アクセント付きの文字は疑問符に置き換えられます。St??edo�?esk?? kraj
私はそれを理解していません。コードは問題ありません。データソースの設定は、正しく動作する他のアプリケーションと同じです。何か案が?
編集1:
これは SID NLS 設定です (別のアプリケーション データベースと非常によく似ています)。
select DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET', 'NLS_LANGUAGE', 'LANGUAGE', 'NLS_TERRITORY', 'TERRITORY') name, value
from v$nls_parameters
where parameter in ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY');
LANGUAGE ENGLISH
TERRITORY CZECH REPUBLIC
CHARACTER SET EE8ISO8859P2
編集2:
WebLogic / データソース
[接続プール] タブには次の属性があります。
URL: jdbc:oracle:thin:@hostname:1521:SID
Driver: oracle.jdbc.xa.client.OracleXADataSource
Oracle タブ: すべてがチェックされていません