我有数据类/表“ 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:1, favouriteColor:"blue" }"
如何使用一些注释将其包装起来,以便像
user.preferences.notifyByEmail
或无需包装到数据对象中
user.preferences.get("notifByEmail"); user.preferences.set("notifByEmail",true);
我想可能会有一些Jackson注释可以添加到字段中,例如
@JsonGenerate public String preferences;
我对JPA相当陌生,文档非常丰富。
我相信我的情况很普遍。谁能举任何例子?
老实说,我认为最好的解决方案是为属性创建一个单独的表(首选项)。
+------------+ | 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之类的“创意解决方案”。