2017-02-10 80 views
2

我在我的數據庫中有很多列,並且不想爲它們編寫自定義查詢,所以請考慮下列方法爲列名稱dynamicaly運行,我給出的列名爲column_name。是這樣的可能嗎?還是有沒有其他的方式來做到這一點?如何添加自定義列名稱Spring Data JPA?

 @Query("select #column_name from Item Where #column_name like %?2% ") 
     List<Item> getUniqueColumn(String column_name,String column_text); 

順便說一句,在spring documantation這個案例中沒有提到。

+0

不清楚你想要什麼...請添加詳細信息 – nhouser9

+0

我編輯了我的問題;我在我的數據庫中有很多列,並且不想爲它們編寫自定義查詢,所以考慮上面的方法爲每個列名稱運行dynamicaly,是否有可能? –

+0

使用Eclipse爲您自動生成實體 –

回答

1

您只能將您期望的值作爲參數傳遞給您的HQL查詢。您無法傳遞列名或表名。

休眠基本上與PreparedStatement在這裏工作,並在那裏被查詢的但不知道表/列的語句不能準備。

你將不得不寫一些字符串替換邏輯或與標準API構建查詢

List<Object> getUniqueColumn(String column_name,String column_text){ 
     StringBuilder query = new StringBuilder(); 
     query.append("select #column_name "); 
     query.append("from Item "); 
     query.append("where #column_name like %?1%"); 

     query = query.toString("#column_name", column_name); 

     session.createQuery(query).setString(1, column_text).list(); 
} 

還記得,你在這裏做的是投影,你不會得到項目,而是一個的名單對象列表。

+0

使用彈簧數據規格,可以'傳遞'列名作爲參數。我在這裏發佈一個例子,https://stackoverflow.com/questions/47407043/spring-data-jpa-pass-column-name-and-value-as-parameters/48492077#48492077 –