繁体   English   中英

在JPA实体中使用JSON字段(实现休眠的UserType)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM