2015-04-14 87 views
0

計劃實體與市場實體以及一些其他「簡單」屬性具有一對一關係。彈簧數據存儲庫(JPA) - 使用實體關係的findByXXX

這裏是我的ScheduleRepository:調用編程方法時

@RepositoryRestResource(path = "schedule") 
public interface ScheduleRepository extends JpaRepository<Schedule, Long> 
{ 
    Collection<Schedule> findByMarket(Market market); 
} 

「findByMarket」 法正常工作。但是,直接從Web應用程序(http://localhost:8080/schedule/search/findByMarket)調用時,請求類型必須爲GET。

我的問題是如何使用GET傳遞市場JSON對象?使用POST不會是一個問題,但findXxx方法必須使用GET。我嘗試通過類似的東西:

?market={marketId:60} 

在查詢字符串,但無濟於事。

+0

爲什麼不使用普通的舊GET參數? '?marketId = 60' –

+0

它無法將其轉換爲市場實例,如果我將取景器命名爲「findByMarketId(int marketId)」,編譯器將會抱怨。 – Jonathan

回答

0

不知道你的控制器是什麼樣的,我會假設如果你想通過marketId得到它看起來像。

?marketId = 60

而你的方法看起來像。您使用的方法將處理與JSON之間的轉換。

@Get 
@Path("/query") 
@Produces({"application/xml", "application/json"}) 
public Todo whatEverNameYouLike(@PathParam("marketId") String marketId) 
+0

我正在使用@RepositoryRestResource,所以我不必編寫控制器。 – Jonathan

+0

我最終使用了@Query註釋,就像jdepedro建議的那樣: – Jonathan

0

在文檔中,參考使用@Param註釋,這樣你就可以打電話給你休息的服務給查詢參數。 Here你有一個例子:

package hello; 

import java.util.List; 

import org.springframework.data.repository.PagingAndSortingRepository; 
import org.springframework.data.repository.query.Param; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 

@RepositoryRestResource(collectionResourceRel = "people", path = "people") 
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> { 

    List<Person> findByLastName(@Param("name") String name); 

} 
+0

使用一個原語或任何其他「簡單」對象(如字符串)不是問題。但是,由於該參數是Market對象,因此它會抱怨它無法將字符串轉換爲該類型。 – Jonathan

+1

而且您無法使用@Query註釋修改find​​By,因此您可以通過簡單的ID進行搜索? – droidpl

+0

還沒有嘗試過,但我更喜歡在沒有任何註釋的情況下解決問題。主要的問題是如何使用GET從瀏覽器傳遞JSON。 – Jonathan

0

我結束了使用@Query註解,就像jdepedro建議:

@Query("select s from Schedule s where s.market.marketId = :marketId and s.locale.localeId = :localeId and s.offline >= :offline order by s.placement, s.slot, s.online") 
    Collection<Schedule> findByMarket(@Param("marketId") Integer marketId, @Param("localeId") Integer localeId, @Param("offline") Date offline);