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

是否可以在Spring Repository@Query注释中使用Array对象作为参数?

麹承
2023-03-14

是否可以在Spring Repository@Query注释中使用Array对象作为参数?

我正在尝试检索列节点存在于字符串数组中的表中的所有行。是否可以使用Spring存储库中的@Query注释一次执行此操作?

这是我的位置实体:

@Entity
@Table(name = "LOCATIONS")
public class Location extends Measurement{

    private String latitude;
    private String nsIndicator;

    private String longitude;
    private String ewIndicator;

    @ManyToOne
    @JoinColumn(name="node")
    private Node node;
}

其中node引用node类,它在数据库中作为BIGINT映射。

我有这样一个存储库:

public interface LocationRepository extends CrudRepository<Location, Long>{

    @Query(value=
            "SELECT l1.node, l1.id, l1.latitude, l1.longitude " +
            "FROM LOCATIONS l1 WHERE l1.node IN (:ids)", 
            nativeQuery=true)
    List<Location> findMeasureByIds(@Param("ids") String[] ids);
}

在那里,您可以看到我试图执行的查询,但它不起作用。我不知道是否可以在那里使用数组,或者参数必须是字符串和/或整数,我在任何地方都找不到。

我尝试了几种组合,比如使用格式正确的简单字符串或长数组。。但迄今为止,一切都没有起到作用。

提前谢谢。

解决方案:

@Query(value="SELECT * FROM LOCATIONS l1 " + 
             "INNER JOIN (SELECT node, MAX(id) AS id FROM LOCATIONS GROUP BY node) l2 " + 
             "ON l1.node = l2.node AND l1.id = l2.id " + 
             "WHERE l1.node IN :ids", nativeQuery=true) 
List<Location> findLastLocationByIds(@Param("ids") Set<Long> ids);

我为查询添加了更多功能,因为我需要检索为每个节点标识符插入的最后一行。所以有MAX函数和内部连接来完成这项工作。

共有1个答案

武嘉祥
2023-03-14

使用集合而不是数组Set

此外,没有理由为此使用本机查询,并且参数周围不应该有括号:

@Query("SELECT l1 FROM Location l1 WHERE l1.node.id IN :ids")
List<Location> findLocationsByNodeIds(@Param("ids") Set<String> ids);

 类似资料:
  • 我制作了一个类 在另一个类中 正如您所看到的,我创建了这个数组,并将UImages与txt和txt2一起放置在其中。简单地说,我要向用户显示一个图像,然后输入一个描述图像的输入,然后检查它是否匹配txt和txt2。在运行模拟器时,我得到以下错误: ***由于未捕获异常“nSunKnownKeyException”而终止应用程序,原因:“[ SetValue:ForUndefinedKey:]:对于

  • 我有一个Emp表和关联的JPA实体-雇员。Emp表具有id、name和is_active列。还有一个资产表,它有对Emp表的FK引用。Assets表有id、emp_id和NAME。 附注:我知道还有其他方法,比如Hibernates的级联特性等,但我特别感兴趣的是Oracle匿名块的使用。

  • 问题内容: 我是JAX-RS的新手,我试图了解注释的工作方式。 在javadoc中有六个等级的列表()。但是,我在网络上找到将this注释与其他类型一起使用的代码,例如: 是否有可以与此注释一起使用的受支持类型的列表?在执行标准之间,此列表是否会更改? 我目前正在试验Jersey,我担心自己写的代码无法移植到其他JAX-RS实现中。 问题答案: 铆接的JAX-RS 规范定义了你可以通过注入的所有标

  • 我是 JAX-RS 的新手,我正在尝试了解注释应该如何工作。 在javadoc中有一个包含六个类的列表(< code >应用程序、< code>UriInfo、< code >请求、< code>HttpHeaders、< code >安全上下文、< code >提供者)。但是,我在网上找到了将this批注用于其他类型的代码,例如: 是否有可用于此批注的支持类型列表?该列表在标准实施期间是否发生变

  • 这是我的代码(简单但有效),它是一个计算引擎,通过按特定顺序应用规则进行试验: 我想用自定义注释对此进行编码,因为我的目标是统计哪些引擎调用哪些规则,我认为这会更容易: 然后我可以用org扫描。springframework。上下文注释。ClassPathScanningCandidateCom使统计更容易。 这可能吗(怎么可能?)?这是好办法吗?我还有别的办法吗?

  • 问题内容: 我可以在JSON文件中使用注释吗?如果是这样,怎么办? 问题答案: 没有。 JSON应该都是数据,如果包含注释,那么它也将是数据。 您可能有一个称为(或其他名称)的指定数据元素,使用JSON数据的应用程序会忽略该数据元素。 在生成/接收JSON的过程中添加注释可能会更好,因为它们应该事先知道什么是JSON数据,或者至少知道其结构。 但是,如果您决定: