我想将在内存中工作的应用程序的类转换为实体,以使其持久化,但是它包含双精度类型字段[] []。我进行了搜索,但没有找到如何将其重写以保持持久性的方法。
public class MyClass{
protected int num;
private double[] tab;
private double a[][];
private double b[][];
....
}
答案 0 :(得分:0)
如果您需要PostgreSQL(支持SQL数组的极少数数据库之一),则可以尝试使用自定义转换器。如下例所示,https://thoughts-on-java.org/jpa-21-how-to-implement-type-converter/
转换为字符串格式的算法如下:
public String convertToDatabaseColumn(double[][] arr) {
if (arr == null) {
return null;
}
// verify array
int len1 = arr.length;
int len2 = -1;
for (double[] ar : arr) {
Objects.requireNonNull(ar);
if (len2 == -1) {
// first iteration only, if non-empty
len2 = ar.length;
}
else {
if (len2 != ar.length) {
throw new RuntimeException("PostgreSQL multidimensional arrays require same lengths on every level");
}
}
}
StringBuilder sb = new StringBuilder();
sb.append('{');
for (double[] ar : arr) {
sb.append('{');
for (double a : ar) {
sb.append(a).append(',');
}
sb.setLength(sb.length()-1);
sb.append("},");
}
sb.setLength(sb.length()-1);
sb.append('}');
return sb.toString();
}
知道这一部分后,您应该能够编写算法来读取它们。只是不要依赖split
或正则表达式,您可能可以跳过验证。
这不包括需要特殊转义的字符串数组,某些情况下用双引号引起来。该算法在任何地方都没有正确描述,您必须在服务器的源代码中找到它。您可以在我的模块中here来尝试实现它,该模块允许您使用许多非基本类型的一维数组。
如果您需要另一种不支持数组的数据库,则可以使用自定义格式将其保存为文本,甚至可以使用属性转换器将其保存为简单的JSON转换。