一尘不染

如何使用JPA和Hibernate自动序列化和反序列化JSON字符串?

hibernate

我有数据类/表“ User”,其中有“ preferences”列

CREATE table "user"; 
ALTER TABLE "user" ADD COLUMN preferences TEXT;

首选项类型为TEXT,我在其中存储JSON。

public class User extends AbstractEntity{
public String preferences;
}

所以user.preferences价值是"{notifyByEmail:1, favouriteColor:"blue" }"

如何使用一些注释将其包装起来,以便像

user.preferences.notifyByEmail

或无需包装到数据对象中

user.preferences.get("notifByEmail");
user.preferences.set("notifByEmail",true);

我想可能会有一些Jackson注释可以添加到字段中,例如

@JsonGenerate
public String preferences;

我对JPA相当陌生,文档非常丰富。

我相信我的情况很普遍。谁能举任何例子?


阅读 446

收藏
2020-06-20

共1个答案

一尘不染

老实说,我认为最好的解决方案是为属性创建一个单独的表(首选项)。

+------------+
| preference |
+------------+---------+------+-----+
| Field      | Type    | Null | Key |
+------------+---------+------+-----+
| user_id    | bigint  | NO   | PRI |
| key        | varchar | NO   | PRI |
| value      | varchar | NO   |     |
+------------+---------+------+-----+

您可以这样在您的实体中进行映射:

@Entity
public class User
{
    @Id
    private Long id;

    @ElementCollection
    @MapKeyColumn(name = "key")
    @Column(name = "value")
    @CollectionTable(name = "preference",
        joinColumns = @JoinColumn(name = "user_id"))
    private Map<String, String> preferences;
}

这样,您的数据库就可以更规范化,而您也不必无所事事,例如将首选项存储为JSON之类的“创意解决方案”。

2020-06-20