2017-10-03 5 views
1

このSQLクエリをJavaでHibernate JPA Criteria(制限付きなど)として記述するにはどうすればよいですか?単純なHibernate Criteriaサブクエリの記述方法

SELECT q.* FROM queue AS q WHERE q.executed = false AND q.queued_on = (SELECT min(queued_on) FROM queue WHERE item_id = q.item_id);

私は、このような最初の部分を書くために管理:

getBaseCriteria() 
    .add(Restrictions.eq("executed", false)) 
    // Missing Second Where Filter Here 
    .addOrder(Order.asc("queuedOn")) 
    .list(); 

答えて

1

サブクエリのための個別の基準インスタンスを作成し、単純に次のように別の制約として追加してください:

DetachedCriteria subCriteria = DetachedCriteria.forClass(Queue.class, "sub") 
    .add(Restrictions.eqProperty("sub.itemId","main.itemId")) 
    .setProjection(Projections.projectionList().add(Projections.min("sub.queuedOn"))); 

session.createCriteria(Queue.class, "main") 
    .add(Subqueries.propertyEq("main.queuedOn", subCriteria)); 
    .add(Restrictions.eq("main.executed", false)); 
    .addOrder(Order.asc("main.queuedOn")) 
    .list(); 
+0

'session.createCriteria'は5.2で廃止予定です – Dragas

関連する問題