使用Spring jpa(List<String>
db)保留巨大的postgresql
实体属性的正确方法是什么?我一直在将它转换为byte[]
,它以bytea
的形式存储在db中,但是这会引起不同的格式设置麻烦(甚至只是重写列表)。
List<String>
可以多达10.000.000个实体。有时,我只需要列出清单,更改一些要素并写回去。
据我了解,其他选择是:
ElementCollection
-我认为这不是解决这么大列表的方法。当前,我使用这些方法将列表与byte[]
之间进行转换:
public static List<String> bytesToStringListByInputStream(byte[] bytes) {
List<String> lines;
if (bytes == null) {
return lines;
}
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DataInputStream in = new DataInputStream(bais);
try {
while (in.available() > 0) {
lines.add(in.readUTF());
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
public static byte[] arrayListToByteArray(List<String> list){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos);
for (String element : list) {
try {
out.writeUTF(element + System.lineSeparator());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
return baos.toByteArray();
}
实体:
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class UserFile implements Serializable {
...some fields...
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private byte[] fileData;
但是,在不同情况下,更改列表并将其保留后,输出行中会出现随机字符-有时是数字或特殊符号。
我想我可以找到它发生的原因,但是无论如何-这是持久保存大型列表的正确方法(通过byte[]
jpa实体字段和bytea
postgresql字段)吗?