sql - Jpql查询提取数组值
问题描述
我的数据库包含一个类型为 varchar 的列。
在该列中,我以 [1,2] 的形式存储值。我需要得到第一个值'1'。我需要使用 spring data jpa 的@query 编写 jpql 查询。
我决定通过使用子字符串函数删除值的大括号,然后我需要将其转换为数组。
所以,我已经尝试过这样的子字符串提取。
SUBSTRING(u.output,1,LENGTH(u.output-2))
这种语法对于子字符串提取是否正确?如何将其转换为数组。
解决方案
如果您无法规范化数据库,那么我将通过 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 []
}
}
推荐阅读
- reactjs - 如何在 Realm 数据库中为以下对象编写模式反应本机
- django - Django 管理站点获取 id 以在 html 中显示
- visual-studio-code - 我可以在 VSCode 中将 URL 作为“文件”打开吗?
- javascript - 自动重启 node.js socket.io
- azure - Azure 存储资源管理器 - 无法列出资源
- ios - 使用 Swift 4 及更高版本对十六进制数进行排序
- typescript - 是否可以从“任何”类型推断类型?
- flutter - 如何防止水平溢出?
- jenkins - 如何为 Jenkins 流水线有效地开发 groovy 脚本?
- r - 有没有办法根据排名来捕获值的序列