2012-07-27 73 views
0

我是hiberante的新手。需要指出正確的方向。hibernate遍歷表中滿足多表的所有行加入

我需要遍歷表中的所有記錄「target_table」那裏有基於其他表

的SQL提供所需的數據記錄的附加約束是

select target_table.id, .... 
    from person, 
     target_table, 
     another_table 
where person.id = target_table.person_Id 
    and target_table.dropEventId = another_table.id 
    and another_table.to_Vendor_Timestamp < to_date('Jul 29 2012','MON dd YYYY') 
    and person.identifyer = 'foobar'; 

不知道什麼最好的方法獲取這些記錄。有人可以推薦適當的方法嗎? 此刻我開始的事情 沿

Criteria criteria = session.createCriteria(TargetTable.class); 
Criteria personCriteria = criteria.createCriteria("person"); 
personCriteria.add(Restriction.equal("idenifyier",identifyier); 
Criteria anotherTableConstriant = constriant.add("another_table"); 
anotherTableConstraint.add(Restriction.lessthan("toVendorTimeStamp", someDateObject); 

線的東西,但我如何才能約束的其餘部分。

回答

0

永遠不要將Hibernate看作「另一種使用SQL/DB的方式」。你應該始終確保你有適當的實體和實體之間的關係。

從你的例子看來,你應該有一個Target-> Another(稱爲dropEvent)和Target-> Person(假設它是人)的關係。

的HQL簡直像

from Target t 
where t.person.identifier = :someId 
    and t.dropEvent.vendorTimeStamp < :someTime 

如果你發現自己仍一直認爲連接表等,這是最有可能的,你是不是使用Hibernate正常。在這種情況下,我發現Hibernate不會幫助你。如果您的應用是以這種以數據庫爲中心的思維模式設計的,請考慮使用iBatis。

+0

表目標有一個person_id列,它是人員表的外鍵。該人員記錄具有列標識符。我的where子句中t.person.identifier在執行時給了我引起:org.hibernate.QueryException:無法解析屬性:person:com ..... T任何想法會導致什麼,以及如何通過這個路障? – 2012-07-27 16:44:08

+0

Adrian你是對的查詢。 「target_table.dropEventId」確實應該是「target_table.another_table_id = another_table.id」 – 2012-07-27 17:50:45

+0

您是否試圖理解我在答覆中所說的內容?你恰恰是那種認爲HQL/Hibernate只是另一種形式的SQL/RDBMS的人。你有沒有試圖讓你的對象設計和OR映射正確? – 2012-07-28 15:57:31