sql >> Databáze >  >> RDS >> Oracle

Načítání dat Clobu jako řetězce (eager) přes org.hibernate.Query Hibernate

Právě jsem měl stejný problém, různé odkazy navrhovaly upgradovat pružinu na 4.0.1+ a hibernaci na 4.3.x, ale to neznamenalo žádný rozdíl. Pak jsem narazil na tento odkaz, který můj problém vyřešil. Autor napíše vlastní ResultTransformer pro Clob a poté jej nastaví jako transformátor pro váš dotaz namísto AliasToEntityMapResultTransformer.

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

Kód z článku níže:

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;
 }
}

Poté v kódu nahraďte

query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

s

query.setResultTransformer(MyResultTransformer.INSTANCE);

Alternativním řešením by navíc mohla být změna typu sloupce, sám jsem to nezkoušel.

Zdroj:http://oreilly.com/java/excerpts/harnessing -hibernate/hibernate-types.html



  1. SQLiteException pomocí WHERE +KEY_Date+='+date+'

  2. SQL dotaz nefunguje s objednávkou podle

  3. Vyhodnocení násobků výrazů 'IN' v klauzulích 'WHERE' v mysql

  4. Chyba PHP:Bylo dosaženo maximální úrovně vnoření funkcí '100', přeruší se