我有以下JPA模型:
问题
@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 :(得分:1)
将存储库更改为此解决了该问题。关键是要根据用户的字段而不是用户本身进行查找。
public interface IssueRepository extends PagingAndSortingRepository<Issue,Long> {
List<Issue> findByUserUsername(@Param("username") String username);
}
GET http://localhost:8080/issues/search/findByUserUsername?username=jerney
这将返回问题列表。
答案 1 :(得分:0)
放另一个只读列 @Column(name =&#34; user_id&#34;,insertable = false,updatable = false) private long userId; 在Issue实体中,使用findByUserId(Long userId)repo方法找到它并将userId参数(即路径变量)传递给控制器,以便使用http调用来完成此操作。
答案 2 :(得分:0)
如果您只需要一条记录,则可以使用简单的findOne(Long userId),因为它可能比字符串字段查询更快