2014-02-17 4 views
2

jaxb Object to Clob을 만드는 방법. 내가 다음과 같은 직렬화 할 수없는 오류가 오면.JAXB Object to Clob

public static void createClob(TestTo testTo){ 
     PreparedStatement pst = null; 
     Connection con = null; 
     //Clob studentListClob = null;     

     try { 
      con = openOASDBcon(false); 
      pst = con.prepareCall(INSERT_Clob); 
      pst.setBytes(1, getByteArrayObject(testTo)); 
      pst.setString(2, ""); 
      pst.executeUpdate(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      close(con, pst); 
     } 
    } 


private static byte[] getByteArrayObject(TestTo testTo){ 

      byte[] byteArrayObject = null; 
      try { 

       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       ObjectOutputStream oos = new ObjectOutputStream(bos); 
       oos.writeObject(testTo); 

       oos.close(); 
       bos.close(); 
       byteArrayObject = bos.toByteArray(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return byteArrayObject; 
      } 
      return byteArrayObject; 
     } 

직렬화를 구현할 수 없습니다. clob에 jaxb 객체를 구현하는 가장 좋은 방법이 있습니까?

+0

JAXB에서 Serializable 클래스를 만드는 방법을 묻는 것처럼 보입니다. 이 경우 http://stackoverflow.com/questions/1513972/how-to-generate-a-java-class-which-implements-serializable-interface-from-xsd-us – Rob

+0

직렬화 할 수있을뿐만 아니라 다음을 참조하십시오. jaxb 객체를 clob로 변환하고 싶습니다. 할 수있는 방법이 있습니까? – jackyesind

+0

@Rob. 할 수있는 방법이 있습니까? – jackyesind

답변

0

데이터베이스의 CLOB (또는 BLOB) 열에 JAXB 객체를 고정하는 방법에는 몇 가지가 있습니다. JAXB 객체를 열에 넣기 위해 사용자 정의 삽입 및 선택 로직을 수행해야한다고 생각합니다. 일반적인 ORM 모델은 객체 당 필드 열 (예 : 최대 절전 모드를 사용하는 경우)).

옵션 1 : 직렬화 가능 JAXB 클래스 (How to generate a Java class which implements Serializable interface from xsd using JAXB?)를 생성하도록 xjc를 구성하십시오. 그런 다음 Serializable 인터페이스를 사용하여 clob/blob의 입/출력 스트림에서 객체를 읽고 쓸 수 있습니다. 이는 데이터베이스에 Java 오브젝트 표현을 저장합니다.

옵션 2 JAXB 제공 XML 마샬링/비 정렬 경로를 사용하여 객체의 상태를 XML 텍스트로 읽거나 쓰십시오. 이것은 데이터베이스에 오브젝트의 XML 표현을 저장합니다.

저는 개인적으로 옵션 2 (XML 표현)를 사용할 것입니다. XSD의 변경 사항을 관리하고 Java 직렬 버전 ID를 처리하지 않고 오래된 객체를 읽을 수 있는지 확인하는 것이 더 쉽습니다. 또한 XML을 CLOB에 넣기 전에 압축하는 것을 고려할 수도 있습니다 (Compressing and decompressing streams 참조).