4

マップされていないテーブルでJavaBean機能を使用する方法はありますか?

したがって、読み取り専用のテーブルがあり、変更されることはありません。データを表示するためだけにクエリする必要があります。ただし、マップされていないオブジェクトをクエリするときに休止状態がデフォルトになるObject[]リターンタイプは必要ありません。結果をカスタムタイプのコレクションに取得したいと思います。ただし、これを行うには、hbmファイルを作成する必要があります。カスタムタイプを作成し、hbmファイルを作成しない方法はありますか?

結果をロードするBusinessobjメソッド:

loadResults()
{
    String qry = "select col1, col2 from table";                
    List<CustomType> result = (ArrayList<CustomType>) dao.HQLWithTransformer(qry, new CustomTransformer()); 
}

カスタムトランス:

public class CustomTransformer implements ResultTransformer {



@Override
public Object transformTuple(Object[] rowdata, String[] arg1) 
{       

        return new CustomType(String.valueOf(rowdata[0]),String.valueOf(rowdata[1]));

    return null;
}

@Override
public List transformList(List arg0) {
    return null;
}

}

DAOメソッド:

public Collection HQLWithTransformer(String qry, ResultTransformer rt){     

    List<?> al=null;
      try
      {            
       Query q = sess.createQuery(qry);
       q.setResultTransformer(rt);
       al = (ArrayList<?>)q.list();                   
      }
      catch(HibernateException he) 
      {       
      log.debug("Hibernate Exception", he);
      }
      finally 
      {
        sess.close();        
      }

    return al;
  }
4

3 に答える 3

2

次のようなコンストラクタ式を使用することもできます。

List<MyClass> dtos = session.createQuery("SELECT NEW com.example.MyClass( e.name, e.data) FROM Entity e").list();

欠点はEntity、テーブルをクエリするために、テーブルをマッピングして作成する必要があることです。注釈を使用して実行できるため、ファイルを作成する必要はありませんhbm

技術的には、それはあなたが求めていたものではありません。レポートのようなクエリをマッピングするのに役立つことがわかったので、おそらくそれがあなたが探しているものです。

于 2013-03-19T19:28:48.740 に答える
1

NativeCriteriaライブラリ(githubのProject、mavencentralで利用可能)を使用できます。サンプルコードは次のようになります。

NativeCriteria c = new NativeCriteria(new HibernateQueryProvider(hibernateSession), "table_name", "alias");
c.setProjection(NativeExps.projection().addProjection("alias.column_name"));  
c.add(NativeExps.isNull("alias.column_name"));
c.setOrder(NativeExps.order().add("alias.column_name", OrderType.ASC));
CriteriaResult res = c.criteriaResult();
while (res.next())
{
    resp.add(res.getLong(0, null));
}

図書館の公式ページ。このライブラリはHibernateセッションとcreateSQLQueryに基づいていますが、マップされたクラスと同等のものを持たない動的で複雑なクエリを生成するための非常にクリーンでシンプルなAPIを提供します。

テストモジュールでさらに多くの例(およびSpring / Spring Bootとの統合)を見ることができます。

于 2013-08-25T11:56:04.027 に答える
0

クエリにを設定できResultTransformerます。

Hibernateは、クエリ結果をマップされていないタイプに変換できるさまざまなトランスフォーマーを提供します。たとえば、AliasToBeanResultTransformerは、選択したフィールドのエイリアスに基づいて変換を実行します。

于 2013-03-19T18:39:26.563 に答える