Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Ładowanie danych Cloba jako String (chętny) przez Hibernate's org.hibernate.Query

Po prostu miałem ten sam problem, różne linki sugerowały aktualizację wiosny do 4.0.1+ i hibernację do 4.3.x, ale to nie robiło żadnej różnicy. Potem natknąłem się na ten link, który rozwiązał mój problem. Autor pisze niestandardowy ResultTransformer dla Cloba, a następnie ustawia go jako transformator dla zapytania zamiast AliasToEntityMapResultTransformer.

http://javatechtricks.blogspot.co .uk/2012/12/hibernate-clob-to-string-conversion.html

Kod z poniższego artykułu:

public class MyResultTransformer extends BasicTransformerAdapter {

 public final static MyResultTransformer INSTANCE;
 static {
  INSTANCE = new MyResultTransformer();
 }

 private MyResultTransformer() {

 }
 private static final long serialVersionUID = 1L;

 @Override
 public Object transformTuple(Object[] tuple, String[] aliases) {
  Map<String, Object> map = new HashMap<String, Object>();
  for (int i = 0; i < aliases.length; i++) {
   Object t = tuple[i];
   if (t != null && t instanceof Clob) {
    Clob c = (Clob) tuple[i];
    try {
     ByteArrayOutputStream bos = new ByteArrayOutputStream();
     IOUtils.copy(c.getAsciiStream(), bos);
     t = new String(bos.toByteArray());
    } catch (SQLException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   map.put(aliases[i], t);
  }
  return map;
 }
}

Następnie w swoim kodzie zamień

query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

z

query.setResultTransformer(MyResultTransformer.INSTANCE);

Ponadto alternatywnym rozwiązaniem może być zmiana typu kolumny, sam tego nie próbowałem.

Źródło:http://oreilly.com/java/excerpts/harnessing -hibernate/hibernate-types.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z połączeniem wiosennym

  2. Powolna migracja do chmury

  3. Przyznaj zmianę tylko w jednej kolumnie w tabeli

  4. Jak ładnie sformatować drukowanie zapytań SQL w SQLAlchemy?

  5. Dlaczego otrzymuję ten wyjątek SQLSyntaxErrorException:ORA-00933:Polecenie SQL nie zostało poprawnie zakończone, gdy próbuję wykonać to zapytanie JDBC?