我希望你能帮助我..我有一个实体:
@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 接口(休眠)并以 json 格式(带有 key-value 条目的 json 对象)放置在 db 中
我不知道additionalData json字段中将放置哪些字段(键由用户定义)..
我保存在db中,例如...
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() .. 但在运行时我对字段名称(键)一无所知)在additionalData ..我希望有人可以帮助我或提出另一种解决方案..