2012-04-25 15 views
0

以Hibernate作爲提供者。在JPA哪種類型的參數最好使用「位置/命名」?

就性能(或其他)而言,哪種類型的參數更適合使用?爲什麼?

陣地

TypedQuery<Client> query = em.createQuery 
    ("FROM Client c WHERE c.clientId = ?1",Client.class); 
query.setParameter(1, clientId); 

命名

TypedQuery<Client> query = em.createQuery 
    ("FROM Client c WHERE c.clientId = :clientId",Client.class); 
query.setParameter("clientId", clientId); 
+0

我從來沒有聽過關於這種比較的任何研究,但我希望看到它的數據源和過程,如果它們存在。 – 2012-04-25 04:24:30

+0

「性能」在這裏*不是一個有用的考慮因素。所以,使用更清晰的表單。這可以從查詢變爲查詢。例如,在INSERT ... VALUES中的位置可能是最有意義的。 – 2012-04-25 04:31:22

回答

3

你不應該真的考慮在這種情況下的表現,命名參數有助於提高代碼的可讀性。即使它比較慢幾秒納秒左右,你應該堅持下去。

TypedQuery<Client> query = em.createQuery 
    ("FROM Client c WHERE c.clientId = :clientId",Client.class); 
query.setParameter("clientId", clientId); 

在上面的行中,非常清楚您設置的值爲clientId它簡單,清晰,清晰,你想如何編碼

+1

此外,與位置參數相比,使用命名參數可以使HQL/JPQL查詢重構更容易且更少出錯 – kyiu 2012-04-25 06:26:10