Java 默认的Spring数据查询,其中包含;id";在列表中(JpaRepository)
我有如下简单实体: Suggestion.java:Java 默认的Spring数据查询,其中包含;id";在列表中(JpaRepository),java,spring,spring-data-jpa,spring-data,nativequery,Java,Spring,Spring Data Jpa,Spring Data,Nativequery,我有如下简单实体: Suggestion.java: @Entity public class Suggestion { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @OneToOne private Employee author; @OneToMany @JoinColumn(name = "recipients_id")
@Entity
public class Suggestion {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToOne
private Employee author;
@OneToMany
@JoinColumn(name = "recipients_id")
private List<Employee> recipients;
}
我想在控制器中返回所有建议
,这些建议在收件人
列表中只包含一个员工的id
是否可以避免自定义查询(本机查询)
我试过:
findByRecipientsContains(id)或
findByRecipientsContaining(id)
但是没有运气
编辑: 当我在存储库中使用时:
可选findByRecipientsIn(长id)代码>
也不带可选且在控制器中:
@GetMapping("/employees/{id}/suggestions")
@ResponseStatus(HttpStatus.OK)
public List<Suggestion> getSuggestionsByRecipient(@PathVariable("id") Long id) {
return suggestionRepository.findByRecipientsIn(id).get();
}
@GetMapping(“/employees/{id}/suggestions”)
@ResponseStatus(HttpStatus.OK)
公共列表getSuggestionsByRecipient(@PathVariable(“id”)长id){
返回suggestionRepository.findByRecipientsIn(id).get();
}
我得到的例外情况如下:
参数值元素[1]与预期类型[com.herokuapp.erpmesbackend.erpmesbackend.employees.employees(n/a)]不匹配;嵌套异常为java.lang.IllegalArgumentException:参数值元素[1]与预期类型[com.herokuapp.erpmesbackend.erpmesbackend.employees.employees(n/a)]不匹配,根本原因应为
findByRecipientsId(Long id)
与此测试用例相比:,它应该可以简单地使用
findByRecipientsId(Long id)
与此测试用例相比:通过整个员工,而不仅仅是id。查看文档后。。。我认为contains
是一个字符串操作,而In
或IsIn
是一个集合操作。也许findSuggestionByEmployeeInRecipients(Employee e)
@mavriksc谢谢,我没有描述我的整个体系结构,但我使用id请求,所以我被迫实现“id”,我几乎可以肯定你能做到这一点:findByRecipientsIn(List idsList)。我现在没有个人电脑,但我记得我以前也做过类似的事情。你只有一个id,但收件人属性是一个列表,因此我认为正确的做法是调用存储库的服务创建一个包含单个元素的列表。因此,当将来有更多ID时,可以重用该函数。除非你使用@Query注释,否则我不认为你可以这样做。传递整个员工,而不仅仅是id。查看文档后。。。我认为contains
是一个字符串操作,而In
或IsIn
是一个集合操作。也许findSuggestionByEmployeeInRecipients(Employee e)
@mavriksc谢谢,我没有描述我的整个体系结构,但我使用id请求,所以我被迫实现“id”,我几乎可以肯定你能做到这一点:findByRecipientsIn(List idsList)。我现在没有个人电脑,但我记得我以前也做过类似的事情。你只有一个id,但收件人属性是一个列表,因此我认为正确的做法是调用存储库的服务创建一个包含单个元素的列表。因此,当将来有更多ID时,可以重用该函数。除非使用@Query注释,否则我不认为您可以这样做。