Надеюсь, вы мне поможете .. У меня есть сущность:
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String name;
@Type(type = "JsonDataUserType")
@Column
private Map<String, Object> additionalData;
//.....
// some data
}
JsonDataUserType реализует интерфейс UserType (hibernate) и помещается в БД в формате json (объект json с записями значения ключа)
Я не знаю, какие поля будут помещены в поле дополнительных данных json (ключи определяются пользователем) ..
Я сохраняю в дБ, например ...
Person person1 = new Person();
person1.getAdditionalData().put("age", 15);
person1.getAdditionalData().put("gender", "male");
person1.getAdditionalData().put("position", "something");
// .. save to db
Person person2 = new Person();
person2.getAdditionalData().put("height", 180);
person2.getAdditionalData().put("nick name", "hahaha");
person2.getAdditionalData().put("slogan", "I'm not stupid");
// .. save to db
И после того, как я хочу сделать запрос вроде:
select p from Person p where p.additionalData.slogan = :slogan...
Как я могу сделать аналогичный запрос?В документации Hibernate говорится, что я должен реализовать CompositeUserType, чтобы использовать пользовательский тип в критериях jpql / hql, но я также должен реализовать getPropertyNames () и getPropertyTypes () .. но во время выполнения я ничего не знаю об именах полей (ключах)) в дополнительных данных .. Я надеюсь, что кто-то может мне помочь или предложит другое решение ..