Как прочитать массив объектов из колонки jsonb в spring data?

Пользователь

от adrien.waters , в категории: Java , год назад

Как прочитать массив объектов из колонки jsonb в spring data?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lilla.herman , год назад

@adrien.waters 

Для чтения массива объектов из колонки jsonb в Spring Data вы можете использовать аннотацию @Query с использованием @Query с использованием SQL-запроса с использованием оператора -> для доступа к элементам массива.


Вот пример:

1
2
3
4
5
6
@Repository
public interface YourRepository extends JpaRepository<YourEntity, Long> {

    @Query(value = "SELECT column_name->'your_array' FROM your_table", nativeQuery = true)
    List<YourObject> findAllObjectsInArray();
}


Здесь column_name - это имя колонки в вашей таблице, а your_array - это имя массива, который вы хотите прочитать. Результатом этого запроса будет список объектов YourObject, которые находятся в массиве.


Пожалуйста, не забудьте заменить YourEntity, YourObject, your_table и column_name на соответствующие имена вашей сущности, класса объекта, таблицы и колонки.


Также обратите внимание на аннотацию @Query, где установлен параметр nativeQuery = true. Это требуется для выполнения SQL-запроса непосредственно на уровне базы данных.


Вы можете использовать этот метод в вашем сервисе для получения списка объектов из массива:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@Service
public class YourService {

    private final YourRepository yourRepository;

    public YourService(YourRepository yourRepository) {
        this.yourRepository = yourRepository;
    }

    public List<YourObject> getAllObjectsInArray() {
        return yourRepository.findAllObjectsInArray();
    }
}


После этого вы сможете вызвать getAllObjectsInArray() в вашем контроллере или другом компоненте для получения списка объектов из массива в колонке jsonb.

Пользователь

от jaren , 10 месяцев назад

@adrien.waters 

Вот возможный вариант примера, демонстрирующий часть вышеуказанного кода, только добавляется еще один компонент, дабы продемонстрировать опцию представления объекта в массиве. В данном случае, это класс "YourObject".

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface YourRepository extends JpaRepository<YourEntity, Long> {

    @Query(value = "SELECT column_name->'your_array' FROM your_table", nativeQuery = true)
    List<String> findAllObjectsInArray();
}

public class YourObject {

    private Long id;
    private String name;

    public YourObject(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

@Service
public class YourService {

    private final YourRepository yourRepository;

    public YourService(YourRepository yourRepository) {
        this.yourRepository = yourRepository;
    }

    public List<YourObject> getAllObjectsInArray() {
        List<String> jsonStrings = yourRepository.findAllObjectsInArray();
        List<YourObject> yourObjects = new ArrayList<>();

        for (String jsonString : jsonStrings) {
            JSONObject jsonObject = new JSONObject(jsonString);
            Long id = jsonObject.getLong("id");
            String name = jsonObject.getString("name");

            YourObject yourObject = new YourObject(id, name);
            yourObjects.add(yourObject);
        }

        return yourObjects;
    }
}


Вам необходимо создать конструктор в объекте YourObject и методы доступа к полям объекта для корректного представления данных из массива в виде объектов.


Использованная здесь библиотека JSONObject служит для конвертации строк JSON в объекты JSON, что позволяет нам извлечь необходимые поля объекта из строки JSON.


Помните, что вам нужно внести соответствующие изменения и настройки в код в зависимости от вашей сущности, JSON-структуры и требований вашего проекта.