Сохраните объект Java как JSON в таблице БД в Spring Data JDBC и выполните поиск с помощью сохраненного JSON в ближайшееJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сохраните объект Java как JSON в таблице БД в Spring Data JDBC и выполните поиск с помощью сохраненного JSON в ближайшее

Сообщение Anonymous »

Я использую Spring-data-jdbc и хочу сохранить объект Java в виде JSON в базе данных, и когда я найду или ищу в репозитории я использую обычный _, как и в обычном вложенном объекте Spring-data-jdbc, в качестве примера findAllByCommonInfo_IsActive(boolean isActive) для поиска внутри объекта с именем commonInfo, это следующее представление, к которому я хочу применить свой вопрос
LuCallingRequestCase.java
< pre class="lang-java Prettyprint-override">

Код: Выделить всё

@Data
@Builder
@Table
@NoArgsConstructor
@AllArgsConstructor
public class LuCallingRequestCase implements Serializable {

@Id
private Long luCallingRequestCaseId;

private Long luProsecutionWorkRequestTypeId;

private CommonInfo commonInfo;

}
CommonInfo.java

Код: Выделить всё

@Data
@Builder
public class CommonInfo {

@NonNull
private final String createdBy;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss", timezone = "GMT+2")
private final Instant createdAt;

private String updatedBy;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss", timezone = "GMT+2")
private Instant updatedAt;

@Builder.Default
private boolean isActive = true;

@Builder.Default
private boolean isUsed = false;

@Builder.Default
@JsonProperty("isDeleted")
private boolean isDeleted = false;
}
Таблица SQL

Код: Выделить всё

CREATE TABLE LU_CALLING_REQUEST_CASE
(
LU_CALLING_REQUEST_CASE_ID           NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY NOT NULL,
LU_PROSECUTION_WORK_REQUEST_TYPE_ID  NUMBER                                          NOT NULL,
COMMON_INFO                 JSON DEFAULT '{
"createdBy": null,
"updatedBy": null,
"createdAt": null,
"updatedAt": null,
"isActive": true,
"isUsed": false,
"isDeleted": false
}',
CONSTRAINT FK4_PROSECUTION_WORK_REQUEST_TYPE FOREIGN KEY (LU_PROSECUTION_WORK_REQUEST_TYPE_ID) REFERENCES LU_PROSECUTION_WORK_REQUEST_TYPE (LU_PROSECUTION_WORK_REQUEST_TYPE_ID) ON DELETE CASCADE
);

LuCallingRequestCaseRepository.java

Код: Выделить всё

@Repository
public interface LuCallingRequestCaseRepository extends PagingAndSortingRepository, CrudRepository {

// Query to count records based on available filter without using 'isDeleted'
@Query("""
SELECT COUNT(*)
FROM LU_CALLING_REQUEST_CASE
WHERE ( LU_PROSECUTION_WORK_REQUEST_TYPE_ID = :prosecutionWorkTypeId OR :prosecutionWorkTypeId IS NULL )
""")
int countByFilter(Long prosecutionWorkTypeId);

// Query to find records with pagination
@Query("""
SELECT
LU_CALLING_REQUEST_CASE_ID,
LU_PROSECUTION_WORK_REQUEST_TYPE_ID,
JSON_SERIALIZE(LU_PROSECUTION_WORK_REQUEST_TYPE_IDS) AS LU_PROSECUTION_WORK_REQUEST_TYPE_IDS,
JSON_SERIALIZE(LU_CASE_TYPE_IDS) AS LU_CASE_TYPE_IDS
FROM LU_CALLING_REQUEST_CASE
WHERE ( LU_PROSECUTION_WORK_REQUEST_TYPE_ID = :prosecutionWorkTypeId OR :prosecutionWorkTypeId IS NULL )
ORDER BY LU_CALLING_REQUEST_CASE_ID
OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY
""")
List  findByFilter(
@Param("offset") int offset,
@Param("limit") int limit,
Long prosecutionWorkTypeId);

// Query to find a specific record by LU_CALLING_REQUEST_CASE_ID
@Query("""
SELECT
LU_CALLING_REQUEST_CASE_ID,
LU_PROSECUTION_WORK_REQUEST_TYPE_ID,
JSON_SERIALIZE(LU_PROSECUTION_WORK_REQUEST_TYPE_IDS) AS LU_PROSECUTION_WORK_REQUEST_TYPE_IDS,
JSON_SERIALIZE(LU_CASE_TYPE_IDS) AS LU_CASE_TYPE_IDS
FROM LU_CALLING_REQUEST_CASE
WHERE LU_CALLING_REQUEST_CASE_ID = :callingRequestCaseId
""")
Optional findByCallingRequestCaseId(
@Param("callingRequestCaseId") Long callingRequestCaseId);

}

Как можно оптимизировать репо, чтобы оно было с меньшей структурой кода на уровне репо вместо плотного кода sql в соответствии с хранилищем Java-объекта как JSON и сделать структуру понятной в качестве примера findAllByCommonInfo_IsActive(boolean isActive ), и он выполняет поиск по всем записям и проверяет, что isActive является истинным или ложным из общей информации json?


Подробнее здесь: https://stackoverflow.com/questions/793 ... ith-stored
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»