如何使用JPA持久化多维Java数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JPA持久化多维Java数组?相关的知识,希望对你有一定的参考价值。
我想将在内存中工作的应用程序的类转换为实体以便持久化,但它包含双类型字段[] []。我搜索过,但没有找到我如何重写它是持久的。
public class MyClass
protected int num;
private double[] tab;
private double a[][];
private double b[][];
....
答案
如果您需要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转换。
以上是关于如何使用JPA持久化多维Java数组?的主要内容,如果未能解决你的问题,请参考以下文章
Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个 GeneratedValue?
如何使用 Spring Data JPA 持久化 JSR-310 类型?
如何使用休眠将mysql与Java连接?例外:没有名为 org.hibernate.tutorial_jpa 的 EntityManager 的持久性提供程序 [关闭]