sql >> Database teknologi >  >> RDS >> Oracle

Indlæser Clob-data som en streng (ivrig) via Hibernates org.hibernate.Query

Jeg har lige haft det samme problem, forskellige links foreslog at opgradere foråret til 4.0.1+ og dvale til 4.3.x, men dette gjorde ingen forskel. Så stødte jeg på dette link, som løste mit problem. Forfatteren skriver en brugerdefineret ResultTransformer til Clob og indstiller denne som transformatoren for din forespørgsel i stedet for AliasToEntityMapResultTransformer.

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

Kode fra artiklen nedenfor:

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

Erstat derefter

i din kode
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);

med

query.setResultTransformer(MyResultTransformer.INSTANCE);

Derudover kunne en alternativ løsning være at ændre kolonnetypen, jeg har ikke selv prøvet det.

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



  1. MySQL eller PHP tilføjer en  hver gang £ bruges

  2. Eksporter forespørgselsresultater til en XML-fil, når du bruger SQLcl (Oracle)

  3. Sekvensnummer i tabel

  4. Gem php-værdi til java