Как искать вложенную собственность в Критериях Hibernate - PullRequest
0 голосов
/ 22 октября 2019

Моя сущность Пользователь имеет вложенное свойство (в Oracle оно отображается в формате строкового поля как JSON), например, в следующем фрагменте:

@Entity(name = "users")

public class User extends Auditable implements Serializable {

   private Long id;

   private String username;

   private String password;

   @Convert(converter = UserInformationConverter.class)
   private UserInfomation additionalInformation;
}

public class UserInfomation {
   private String email;

   private String phoneNumber;
}

И затем я хотел бы выполнить поиск по "электронной почтеmsgstr "свойство в поле" дополнительная информация "в запросе критериев. Я пытался:

predicate = cb.and(predicate, cb.like(root.get("additionalInformation").get("email"), cb.parameter(String.class, "email")));

Но я получил ошибку:

"Illegal attempt to dereference path source [null.additionalInformation] of basic type; nested exception is java.lang.IllegalStateException: Illegal attempt to dereference path source [null.additionalInformation] of basic type"

Пожалуйста, предложите мне несколько решений.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Вы можете использовать критерии, например:

 cb.like(cb.lower(root.get("additionalInformation").get("email"));
0 голосов
/ 22 октября 2019

Вы не можете использовать root.get("xx").get("xx"), чтобы получить поле в json, которое обычно используется для поиска вложенных свойств (например, свойство один-к-одному, свойство один-ко-многим). В postgresql я использую CriteriaBuilder#function, чтобы найти поле в json, у оракула должны быть похожие решения.

...