JPA Specification Predicate on a jsonb list

Viewed 172

I need to search on a field that is a list of objects stored as a json blob. Need to search where an the "name" equals "Order Number" and value equals 1234 in the example below.

@Data
@Entity
public class Order {
   @Type(type = "jsonb")
   @Column(columnDefinition = "jsonb")
   private List<ReferenceNumber> referenceNumbers = new ArrayList<>();
   ...
}

@Data
public class ReferenceNumber {
   private ReferenceNumberType type;
   private String value;
}

@Data
public class ReferenceNumberType {
   private long id
   private String name;
}

I have a search specification that I can't figure out how to create the Predicate

public class OrderSearchSpecification  implements Specification<Order> {
   @Override
   public Predicate toPredicate(@NonNull Root<Order> root,
                                @NonNull CriteriaQuery<?> criteriaQuery,
                                @NonNull CriteriaBuilder builder) {
   ...
   String v = 1234
   Need to search where an the "name" equals "Order Number" and value equals v 
   
   ...
}

Data looks like the following in the database.

[
   {"type": {"id": 3, "name": "Order Number"}, "value": "1234"},
   {"type": {"id": 2, "name": "foo"}, "value": "bar"}
]
0 Answers
Related