2012-02-01 10 views
0

私はクラスTradeとサブクラスOperationを持っています。それらはデータベースにマップされます。だから私はやるとき:休止状態を使用してデータベースからレコードを取得する

trades = session.createQuery("from Trade").list() 

私は取引記録のArrayListのを取得し、私の貿易インスタンスを通じて特定の貿易のための操作にアクセスすることができます。

しかし、私が行うとき:

trades = session.createQuery(" 
    from Trade as trade 
    inner join trade.operations as operation 
    with to_char(operation.datetime, 'yyyyMMdd') = to_char(sysdate, 'yyyyMMdd') 
    order by operation.datetime" 
).list(); 

私は、各要素が作動し、貿易インスタンスを含むオブジェクトの配列を取得します。

条件(2番目のオプションと同じ)を持つ取引の配列(最初のオプションと同じ)としてレコードを取得するにはどうすればよいですか?


Iが試み:商品として取引から選択トレード内側はTO_CHARと操作としてtrade.operationsに参加(operation.datetime、 'YYYYMMDD')= TO_CHAR(SYSDATE、 'YYYYMMDD')operation.datetime

これは、javatestcaseに感謝しました。しかし、私がtrade.operationsをループすると、今日までに何らかの操作を含む取引が得られますが、それが別の日以降の操作であっても、その取引のすべての操作を取得します。だから条件を満たしていない。

ヒント?

ありがとうございます!

+1

「お取引を選択してください」から... – javatestcase

答えて

1

trade.operationsには、常にその取引のすべての操作が含まれます。 hibernateは、変更の追跡を中断させ、また道路下の多くの混乱につながるため、部分的に初期化された子コレクションを持つことはできません。したがって、最高の休止状態は、あなたに貿易とマッチング操作のペアを与えることです。 私は、トレードとマッチング操作から必要なすべてのプロパティを含むクラスを作成し、AliasToBeanTransformerを使用します。

+0

お返事ありがとうございます。それは本当に便利です。私はPythonでhibernateによく似たライブラリをSQLAlchemyを使用していました。私が覚えている限り、SQLAlchemyでは条件に基づいてコレクションを取得することができます。 – bribon

関連する問題