Как отсортировать по полю json в Spring данные jpa? - PullRequest
0 голосов
/ 01 ноября 2019

Я использую запрос спецификации jpa данных Spring для выполнения динамического запроса

У меня проблема с сортировкой по полю json, и я много раз искал в Google, но до сих пор не знаю, как это сделать.

Это очень легко сделать с помощью sql:

select * , JSON_EXTRACT(json_column, '$.age') as age from table order by  age desc ;

Есть идеи? Спасибо вам всем.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Я просто нашел другой способ сделать это. Вот решение:

@Entity
@Data
@EntityListeners(AuditingEntityListener.class)
public class Expert extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    private String code;

    @Formula(value = "JSON_EXTRACT(expert_information, '$.basicInformation.nameEN')")
    private String age;

    @Type(type = "json")
    @Column(columnDefinition = "json", nullable = false)
    private Map<String, Object> expertInformation;
}

Ключом этого решения является использование аннотации @Formula. В этой аннотации используйте функцию json, чтобы извлечь ее как обычное свойство.

0 голосов
/ 01 ноября 2019

Вам нужно сделать age обычным постоянным свойством.

Этого можно добиться, создав представление базы данных из 2 столбцов со столбцами идентификатора и возраста, с столбцом возраста, основанным на JSON_EXTRACT, как и в вашем вопросе. .

Затем вы можете использовать @SecondaryTable на вашей сущности, чтобы она могла быть сопоставлена ​​как с ее таблицей, так и с только что созданным представлением, объединенным в столбцах id.

Вы можететогда сделайте возраст постоянным свойством. Затем вы можете отсортировать фильтр по возрасту, как и для любого другого постоянного свойства.

@Entity
@Table("...")
@SecondaryTable("my_new_view")
public class MyEntity{

    //existing mappings

    @Column(name ="age" table="my_new_view", insertable="false", updateable="false")
    private Integer age; //ensure to use wrapper type here to avoid issues
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...