当前位置: 首页 > 知识库问答 >
问题:

SpringJPA。如何使用@Query仅获取ID列表

梁丘成和
2023-03-14

我试图写这个来获取列表,我必须将ID列表作为参数传递:

@Query(value = "SELECT OutbreakDiagnosticTests FROM OutbreakDiagnosticTests WHERE OutbreakDiagnosticTests.outbreaks  in (:outbreakIds) ")
List<OutbreakDiagnosticTests> getDiagnosticTestsByOutbreaks(@Param("outbreakIds") List<Long> outbreakIds);

我的实体是我用来查询的实体是:

@Entity
@EntityListeners(OutbreakDiagnosticTestManagerImpl.class)
@Table(name = "outbreak_diagnostic_tests")
public class OutbreakDiagnosticTests extends AbstractTemporalWorkingData implements Serializable{
  
/**
   * 
   */
  private static final long serialVersionUID = 636298998880960358L;

  @Id
  @Column(nullable = false, name = "obdt_id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long obdtId;

  @Column(nullable = false, name = "nature", length = 255)
  private String nature;

  @Column(nullable = true, name = "diagnostic_test_req", length = 255)
  private String diagnosticTestReq;

  @OneToMany(mappedBy = "outbreakDiagnosticTests", cascade = CascadeType.ALL, orphanRemoval = true)
  @Filter(name = "workingData")
  private Set<TestsResults> testsResults;

  @ManyToOne
  @JoinColumn(name = "outbreak_id", nullable = false)
  private Outbreaks outbreaks;

  @ManyToOne
  @JoinColumn(name = "diag_test_id", nullable = true)
  private DiagnosticTests diagTests;

  @ManyToOne
  @JoinColumn(name = "lab_id", nullable = true)
  private Laboratories lab;

  @Column(nullable = false, name = "is_field")
  private Boolean isField = false;

但我在运行后遇到了以下异常:

Error creating bean with name 'labTestSummariesDaoImpl': Unsatisfied dependency expressed through field 'obDiagTestRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'outbreakDiagnosticTestRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.wahisplus.wcommon.repository.outbreak.OutbreakDiagnosticTestRepository.getDiagnosticTestsByOutbreaks(java.util.List)!

有人能帮我用上面的方法获取列表吗?或者能告诉我我在这方面做错了什么。我不想使用本机,即(nativeQuery=true)使用这个。

共有2个答案

潘泰
2023-03-14

由于您已经在使用Spring Data JPA,因此提供了一种方法OOTB:List findAllById(Iterable id);

这个方法接收一个非空ID列表,并根据这些ID返回记录。既然您没有使用DTO概念,也没有为大量ID获取al列,那么为什么不使用此方法进行处理呢。

金阳华
2023-03-14

使用别名,如OutbreakDiagnosticsts o,对于select id,使用o。id并确保自动连线正确

@Query(value = "SELECT o FROM OutbreakDiagnosticTests o WHERE o.outbreaks.id IN (:outbreakIds) ")
List<OutbreakDiagnosticTests> getDiagnosticTestsByOutbreaks(@Param("outbreakIds") List<Long> outbreakIds);
 类似资料:
  • 我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样: 当我尝试运行我的代码时,它的返回 org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boo

  • 我想使用亚马逊 SNS 服务向Android设备发送推送通知。 但正如亚马逊官方网站上列出的: 您可以使用以下受支持的推送通知服务之一向移动设备和台式机发送推送通知消息: 亚马逊设备消息(ADM) 适用于iOS和Mac OS X的Apple推送通知服务(APNS) 百度云推送(百度) 适用于Android的谷歌云消息传递(GCM) 适用于Windows Phone的Microsoft推送通知服务(

  • 我想从excel表格中读取一组用户名和密码。我的用户名出现在第一列,但我的密码值出现在第8列。我不想通过给出第8列地址来读取第8列的值。相反,我想在excel工作表中的任何地方读取密码值。有什么办法可以做到这一点吗? FileInputStream fs=new FileInputStream(strReadFile); 工作簿wb=Workbook.getWorkbook fs; 工作簿sh=w

  • 问题内容: 我正在尝试收集一个部门中的ID列表(数组) 给我一个jQuery对象,但不是一个真正的数组; 我可以 然后使用for循环将id属性放入另一个数组 或者我可以做 无论如何,我只是想看看jQuery中是否有速记来做到这一点。 问题答案: //但是我无法真正获取ID并将其分配给不在范围内的数组?(或者我可以) 是的你可以! 请注意,当您处于正确的轨道上时,Sighohwell和cletus都

  • 我正在寻找一些东西可以帮助我获得票证的id创建在第一行。 我知道我可以通过使用不同的准备好的查询来简化这一点,但我不想(试着看看这样做是否可行,是否不使用多查询方式)。 我知道mysql中的LAST_INSERT_ID(),但我有点担心同时插入几行.... 在我的研究过程中,我也看到有人直接选择指定的ID,但这是一个很大的资源成本。 我也看到@@插入,我没有看到他们之间有很大的区别,所以我也有同样

  • 我正在尝试创建一个Web应用程序,该应用程序从我的谷歌日历帐户中获取数据,并将其放在使用自己的日历程序的网站上。我不想每次运行程序时都必须获得该帐户的用户权限,因为我是该帐户的用户,并且根据https://developers.google.com/api-client-library/ruby/auth/service-accounts和https://developers.google.com