Данные Spring jpa сохраняются большие свойства List <String> - PullRequest
0 голосов
/ 31 марта 2019

Как правильно сохранить огромное свойство сущности List<String> с помощью Spring jpa (postgresql db)? Я конвертировал его в byte[], который хранился как bytea в дБ, однако это вызывает различные проблемы с форматированием (даже просто переписывая список). List<String> может достигать 10.000.000 объектов. иногда мне просто нужно взять список, изменить несколько элементов и написать его обратно.

Как я понимаю, другие варианты:

  1. используйте ElementCollection - я думаю, что это не решение для таких больших списков.
  2. Храните его в виде большой строки с разделенными символами - но это тоже не слишком эффективный вариант.

В настоящее время я использую эти методы для преобразования списка в / из 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)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...