sql >> データベース >  >> RDS >> Oracle

Hibernateのorg.hibernate.Queryを介してClobデータを文字列として(熱心に)ロードする

    同じ問題が発生しました。さまざまなリンクで、Springを4.0.1+にアップグレードし、休止状態を4.3.xにアップグレードすることが提案されましたが、これによる違いはありませんでした。それから私は私の問題を解決したこのリンクに出くわしました。作成者は、ClobのカスタムResultTransformerを作成し、これをAliasToEntityMapResultTransformerではなくクエリのトランスフォーマーとして設定します。

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

    以下の記事のコード:

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

    次に、コードで

    を置き換えます
    query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
    

    query.setResultTransformer(MyResultTransformer.INSTANCE);
    

    さらに、別の解決策として、列の種類を変更することもできます。自分で試したことはありません。

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



    1. 変数でGRANTを使用する方法は?

    2. LIKE'string' vs ='string'を使用した場合のOracleのパフォーマンスへの影響はありますか?

    3. HibernateマッピングファイルでSerializableBlobタイプを表現する方法

    4. 減算するときにphpでmysqlを更新する方法