2014-12-31 3 views
2

나는 열이 NVARCHAR2 인 테이블을 가지고 있고 최대 절전 모드 주석을 사용하여 내 개체를 빌드했습니다. DB에 삽입하거나 DB에서 가져 오려는 경우 "??????? ", 다음과 같이 사용자 지정 Dialect를 구현했지만 작동하지 않았습니다.NVARCHAR2를 사용하여 최대 절전 모드

public class CustomOracleDialect extends Oracle10gDialect{ 

    public CMSCustomOracleDialect() { 
     registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName()); 
     registerColumnType(Types.VARCHAR, "nvarchar2($1)"); 
     registerColumnType(Types.CLOB, "nclob"); 
     registerColumnType(Types.NCLOB, "nclob"); 
    } 

} 

답변

2

개체의 열을 어떻게 매핑합니까? 아래의 매핑이 작동합니다.

@Column(name = "PHONE_NUMBER", nullable = false, columnDefinition = "nvarchar2 (2000)") 
public String getPhoneNumber() { 
    return this.phoneNumber; 
} 

참고로 JPA @ Column annotation입니다. entityManager.persist()를 호출하면 전화 객체가 작동합니다.

3

조금 늦을 수도 있지만 난 그냥 aswell이 문제를 건너하고 난 그

@Nationalized 

또는

당신의 요소가 대신 org.hibernate.type.StringNVarcharType를 사용하게
@Type(type="org.hibernate.type.StringNVarcharType") 

와 최대 절전 클래스 주석을 달 수 있습니다 발견 VarChar 유형 문자열

릴리스 4.1.10 이상에서 최대 절전 모드로 도입되었습니다. 그래서 그것은 정확하게 NVarChar2 타입을 사용합니다. 그렇지 않으면 VarChar2로 다시 돌아가서 국제 문자를 잃게됩니다. 이 문제가 해결 된

최대 절전 모드 락스 : https://hibernate.atlassian.net/browse/HHH-5869

과 jboss-최대 절전 모드 문서 : https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch08.html#value-national-character-types

+0

당신은 사람이야. 속성을 ​​사용하여 문제가 해결되었습니다. – keni