2013-09-24 76 views
0

我是新的休眠實際上。有問題創建下面的SQL查詢的標準對象。你願意帶領我嗎?SQL查詢到休眠標準

SELECT P1.*,O1.PROJECT_OID FROM POINTALL P1 
LEFT JOIN 
OPERATION_PLAN O1 
ON P1.OID = O1.GEOVISION_POINT_OID; 

回答

0

您不需要創建條件。您可以執行原生SQL查詢,甚至可以在與SQL非常相似的HQL中編寫相同的查詢。

+0

我知道HQL,但我需要動態地添加限制。那是我的問題 –

+0

如果這兩個實體是相關的(或映射),那麼你可以通過標準來做到這一點,HQL就是這樣。 –

1

如果您POINTALLOPERATION_PLAN表比唯一的標準將致力於以其它方式使用HQL或SQL映射。

這就是你需要創建

Criteria criteria = getSession().createCriteria(POINTALL.class,"P1"); 

ProjectionList projections = Projections.projectionList(); 
projections.add(Projections.property("P1.something"),"aliasName"); 
projections.add(Projections.property("P1.something"),"aliasName"); 
.. 
projections.add(Projections.property("O1.PROJECT_OID"),"PROJECT_OID"); 

criteria.createAlias("P1.OPERATION_PLAN","O1", Criteria.LEFT_JOIN); 

criteria.setProjection(projections); 
+0

然後我得到以下異常:org.hibernate.QueryException:無法解析屬性:OPERATION_PLAN of:com.blabla.PointAll –

+0

獲得您在PointAll bean中爲'OPERATION_PLAN'指定的確切名稱。 – commit

+0

pointAll是一個視圖和operationPlan是一張桌子。它們之間的唯一關係是pointOid。所以與pointAll中的operationPlan沒有任何關係。 –