2017-09-13 1 views
2

나는 다음 코드로 ObjectDB 데이터베이스에 일부 UTF-8 문자열을 저장하기 위해 노력하고있어 :ObjectDB JPA 데이터베이스에 UTF-8 문자열을 저장하려면 어떻게해야합니까?

ResourceBundle entries = Utf8ClassLoader.getBundle("localization/language", "fa-IR"); // fa-IR is a UTF-8 and RTL language 
Enumeration<String> keys = entries.getKeys(); 
for (String key = keys.nextElement(); keys.hasMoreElements(); key = keys.nextElement()) { 
    ResourceEntity entity = new ResourceEntity(); 
    entity.setId(new ResourceEntity.PKC(key, locale)); 
    entity.setValue(entries.getObject(key)); 
    resourceDAO.persistOrUpdate(entity); 
} 

모델 :

@Entity 
public class ResourceEntity { 
    @EmbeddedId 
    private PKC id; 

    private Object value; 

    // Getters and setters omitted 

    @Embeddable 
    public static class PKC { 
     String key; 
     String locale; 

     public PKC() {} 

     public PKC(String key, String locale) { 
      this.key = key; 
      this.locale = locale; 
     } 

     // Getters and setters omitted 
    } 
} 

현지화/language_fa_IR.properties이 존재하고 제대로 열립니다.

DAO의 persistOrUpdate 메서드는 트랜잭션 내의 EntityManager.persist 함수에 지나지 않습니다.

을 (키가있는 경우와 EntityManager.merge는 않습니다)하지만이 ObjectDBViewer을 열 때, 나는이를 참조하십시오 Screenshot

가 어떻게 문자를 변경하지 않고 문자열을 저장할 수 있습니까?

답변

1

사실 ObjectDB에는 문제가 없었지만 ResourceBundle은 UTF가 아닌 문자열을 반환했습니다. 나는이 줄을 해결 :

entity.setValue(new String(entries.getString(key).getBytes("ISO-8859-1"), "UTF-8"));

1

ObjectDB 당신이 그들을 저장 등의 객체 데이터베이스 그냥 문자열 필드 포함한 내용으로 객체를 검색한다. 그래서 대개 인코딩은 ObjectDB를 사용하는 것과 관련이 없습니다. 단지 메모리에있는 문자열의 상태를 보존하기 때문입니다.

그러나 Explorer에서 특수 문자를 보는 기능에 영향을 줄 수 있습니다. 이 경우 도구> 옵션> 일반> 인코딩을 사용하여 탐색기에서 인코딩을 설정할 수도 있습니다.

+0

실제로 ObjectDB에는 아무런 문제가 없었습니다. ResourceBundle 만 UTF-8이 아닌 문자열을 제공하고 있었으며 대답에이를 수정했습니다. –

관련 문제