【问题标题】:Jpql query to extract array valueJpql查询提取数组值
【发布时间】:2019-06-24 20:01:00
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: sql spring-data-jpa jpql


    【解决方案1】:

    如果您无法规范化数据库,那么我将通过 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 []
        }
    }
    

    【讨论】:

    • 在该列中,我还存储了不同类型的值,例如 json 字符串,如果我使用转换器,它将适用于其他类型的值。我不需要那个。
    • 听起来很可爱。希望这是一些遗留代码,而不是您从头开始开发的代码!
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2015-10-13
    • 2017-08-25
    • 2014-07-07
    • 2020-03-11
    • 2014-10-26
    • 2017-03-10
    • 2013-11-13
    相关资源
    最近更新 更多