У меня есть сущность:
Код: Выделить всё
@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 additionalData;
//.....
// some data
}
Я не знаю, какие поля будут помещены в поле дополнительных данных 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()... но во время выполнения я ничего не знаю о имена полей (ключи) в дополнительных данных..
Надеюсь, кто-нибудь сможет мне помочь или предложит другое решение..
Подробнее здесь: https://stackoverflow.com/questions/544 ... e-usertype
Мобильная версия