2015-03-03 20 views
-1

我有一個彈簧應用程序應該連接到一個現有的數據庫,並根據一些屬性查詢實體的存在。我不想爲此創建一個@Entity類。但我仍然想使用彈簧管理EntityManager如何在Spring中創建原生查詢?

當使用Spring,什麼是最好的方法來查詢該實體的select?使用em.createNamedQuery(QUERY);String QUERY = "SELECT count(*) from my_table where username =: username AND email := email)";

回答

0

使用em.createNativeQuery(QUERY)。此外,您必須使用位置參數(?1)而不是命名參數(:email),因爲在本機查詢中只有JPA支持位置參數。

1

來自@ predrag-maric和@ pL4Gu33的答案都是正確的,但是如果您在項目中使用JPA(例如Hibernate),那麼也可以考慮使用@NamedNativeQuery註釋。

更多about named native queries。本地查詢的

+0

但我可以用一個名爲無需一個'@ Entity'類本地查詢? (這是寫在我的初始文章中的情況)。 – membersound 2015-03-03 12:11:14

+0

恐怕你必須;來自doccumentation:'NamedNativeQuery註解可以應用於實體或映射超類.'如果你真的不想'@ Entity',你應該使用'EntityManager.createNativeQuery' – 2015-03-03 15:11:13

+0

這就是我所做的。 – membersound 2015-03-03 15:16:23

0

簡單的例子

@PersistenceContext 
    EntityManager em; 

public String test(Integer id) 
{ 
Query query = em.createNativeQuery("SELECT name FROM Accounts where id=?"); 
query.setParameter(1,id); 
return query.getSingleResult(); 
}