![](/img/trans.png)
[英]Hibernate / JPA entity attribute with a UserType not loaded correctly
[英]Using json field in jpa entity (implementing hibernate UserType)
希望您能帮助我。.我有一个实体:
@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格式(带有键值条目的json对象)放在db中
我不知道哪些字段将放置在AdditionalData 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()..但是在运行时,我对字段名一无所知)in anotherData ..我希望有人可以帮助我或提出其他解决方案。
尝试类似
@Query("select p from Person p where p.additionalData->>':key' = :value")
List<Person> findByKeyValue(@Param("key") String key, @Param("value") Object value) {
}
您现在可以将其称为repository.findByKeyValue("height", 180)
或repository.findByKeyValue("slogan", "I'm not stupid")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.