0

InverterLogの2 つのクラスがあり、Inverter には多くの Logs (1:n)があります。タイムスタンプ属性としての各ログ。

インバーターにクエリを実行すると、"Inverter.getLog()" によってすべてのログが取得されます。これで問題ありません。

ただし、選択したログだけを使用して、インバーターを返すクエリを作成したいと考えています。

select t from Inverter t, Log l WHERE t.id = :id AND l.timestamp >= :date

これにより、たくさんの結果が得られますが、Logs.timestamp >= :date の結果として 1 つのインバーターを取得したい

これは可能ですか?

4

1 に答える 1

2

クエリは、基準を満たすすべてのインバーターとログを要求しますが、それらの間で結合を行うことはありません。

また、ログのリストの一部だけをインバーターにロードすることはできません。エンティティは、特定のクエリの結果ではなく、データベースに実際にあるものを表します。

ID でインバーターを取得するために使用em.find()し、次のクエリを使用して基準を満たすすべてのログを取得します。

select log from Inverter inverter 
inner join inverter.logs log 
WHERE inverter.id = :id AND log.timestamp >= :date

そして、インバーターとそのログの部分的なリストを含むオブジェクトを作成します。

于 2013-03-24T17:20:20.953 に答える