Использование поля json в объекте jpa (реализация hibernate UserType)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование поля json в объекте jpa (реализация hibernate UserType)

Сообщение Anonymous »

Надеюсь, вы мне поможете..
У меня есть сущность:

Код: Выделить всё

@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
}
JsonDataUserType реализует интерфейс UserType (спящий режим) и помещается в базу данных в формате 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()... но во время выполнения я ничего не знаю о имена полей (ключи) в дополнительных данных..
Надеюсь, кто-нибудь сможет мне помочь или предложит другое решение..

Подробнее здесь: https://stackoverflow.com/questions/544 ... e-usertype
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»