사용자 도구

사이트 도구


java:hibernate:mssqlserver

문서의 이전 판입니다!


Hibernate & MS SQL Server

NVARCHAR Dialect 매핑

Entity에 NVARCHAR 컬럼 선언을 하려면

  • SQLServer2008Dialect에서 NVARCHAR registerColumnType 돼 있음 따라서 이 이후 버전 Dialect를 사용하면 NVARCHAR 매핑이 작동한다.
  • @org.hibernate.annotations.Nationalized 애노테이션을 통해 NVARCHAR 로 Entity Column 매핑을 할 수 있다.
    // NVARCHAR 매핑
    @Basic
    @Nationalized
    public String description;
     
     
    // NCLOB 매핑
    @Lob
    @Basic
    @Nationalized
    public NClob description;

SELECT 결과 컬럼에 NVARCHAR 등이 있을 경우에 해석을 위한 Dialect 추가 설정

package com.nhl.dao;
import java.sql.Types;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.type.StandardBasicTypes;
 
public class SQlServerDBDialect extends SQLServerDialect {
 
public SQlServerDBDialect() {  super();
        registerHibernateType(Types.NCHAR, StandardBasicTypes.CHARACTER.getName()); 
        registerHibernateType(Types.NCHAR, 1, StandardBasicTypes.CHARACTER.getName());
        registerHibernateType(Types.NCHAR, 255, StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.TEXT.getName());
        registerHibernateType(Types.NCLOB, StandardBasicTypes.CLOB.getName());
 
} }

가설

  • varchar 컬럼 매핑을 다음과 같이하고, byte[] 값을 올바로 넣어주면 잘 작동하지 않을까?
    @Column(name="code", columnDefinition="varchar", length=40)
    private byte[] code;
     
    // 그리고 Dialect 에서 
    registerHibernateType( Types.CHAR, StandardBasicTypes.CHARACTER.getName() );
    • 이렇게 하고, String 값을 String.getBytes('UTF-16') 등으로 Byte로 만들어서 저장하거나 하면 될 듯 하다.
    • String code로 선언할 수 이는 방법은없을까?
  • 그냥 Hibernate UserType을 만들고, varchar의 데이터를 binary로 변경하고, 이를 String으로 바꿔주면 될 듯하다.
java/hibernate/mssqlserver.1529778394.txt.gz · 마지막으로 수정됨: 2018/06/24 03:26 저자 kwon37xi