首页 > 解决方案 > Jpql查询提取数组值

问题描述

我的数据库包含一个类型为 varchar 的列。

在该列中,我以 [1,2] 的形式存储值。我需要得到第一个值'1'。我需要使用 spring data jpa 的@query 编写 jpql 查询。

我决定通过使用子字符串函数删除值的大括号,然后我需要将其转换为数组。

所以,我已经尝试过这样的子字符串提取。

  SUBSTRING(u.output,1,LENGTH(u.output-2)) 

这种语法对于子字符串提取是否正确?如何将其转换为数组。

标签: sqlspring-data-jpajpql

解决方案


如果您无法规范化数据库,那么我将通过 JPA 转换器规范化域模型。

您可以只加载实体并正常导航数组。

https://www.baeldung.com/jpa-attribute-converters

@Entity
public MyEntity{
    @Convert(converter = MyArrayConverter.class)
    int [] values;
}

创建一个 JPA 转换器:

@Converter
public class MyArrayConverter implements
  AttributeConverter<Integer [], String> {

    @Override
    public String convertToDatabaseColumn(int [] values) {
      //convert int [] to string "[1,2,3]"
    }

    @Override
    public Integer [] convertToEntityAttribute(String dbValue) {
      //convert string "[1,2,3]" to int []
    }
}

推荐阅读