2017-05-29 50 views
0

我有以下JPA型號:Spring Boot REST - 如何實現需要Java對象的搜索?

問題

@Entity 
public class Issue { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 
private String title; 
private String text; 

@ManyToOne 
@JoinColumn(name="user_id") 
private User user; 

public Issue() {} 

public Issue(String title, String text) { 
    this.title = title; 
    this.text = text; 
} 

public long getId() { 
    return id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getText() { 
    return text; 
} 

public void setText(String text) { 
    this.text = text; 
} 

public User getUser() { 
    return user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 

@Override 
public String toString() { 
    return "Issue [id=" + id + ", title=" + title + ", text=" + text + ", user=" + user + "]"; 
} 
} 

用戶

@Entity 
public class User { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 
private String username; 
private String firstname; 
private String lastname; 

public User() {} 

public User(String username) { 
    this.username = username; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getFirstname() { 
    return firstname; 
} 

public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

@Override 
public String toString() { 
    return "User [id=" + id + ", username=" + username + ", firstname=" + firstname + ", lastname=" + lastname 
      + "]"; 
} 
} 

和延伸PagingAndSortingRepository和包含方法List<Issue> findByUser(User user);請參見下面的問題庫:

public interface IssueRepository extends PagingAndSortingRepository<Issue,Long> { 
    List<Issue> findByUser(User user); 
} 

我試圖找到一種方法來導航這些與HTTP調用的關係,即如何調用findByUser(User user)並獲取該用戶的所有問題?

使用下面的電話我可以執行特定的查詢:

GET http://localhost:8080/issues/search/findByUser

但我不清楚我應該提供的用戶?我是否將該ID作爲查詢參數發送?我是否構造一個對象並將其作爲查詢參數發送?我只是用錯誤的方式來建模嗎?

我想找回包含此特定用戶的所有問題的JSON列表。

在此先感謝您的幫助或指導。

+0

你能告訴我們你的倉庫? –

+0

是的,現在發佈。 – Josh

+0

我想這可能是有用的閱讀https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc和http://docs.spring.io/彈簧/文檔/ 4.3.8.RELEASE /彈簧的框架參考/ htmlsingle /#MVC控制器 –

回答

1

更改存儲庫以解決此問題。關鍵是根據用戶的字段進行查找,而不是用戶本身。

public interface IssueRepository extends PagingAndSortingRepository<Issue,Long> { 
    List<Issue> findByUserUsername(@Param("username") String username); 
} 

GET http://localhost:8080/issues/search/findByUserUsername?username=jerney

這將返回的問題的列表。

0

把另一個只讀列如 @Column(name =「user_id」,insertable = false,updatable = false) private Long userId; 在Issue實體中,並使用findByUserId(Long userId)repo方法來查找它並將userId參數(即路徑變量)傳遞給控制器​​以使用http調用執行此操作。

0

您可以使用一個簡單的findOne(龍用戶id),如果你只需要一個記錄其可能快於字符串字段查詢