【问题标题】:hibernate jsonb type after save makes some ordering保存后休眠jsonb类型进行一些排序
【发布时间】:2021-11-25 14:10:02
【问题描述】:
 @Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private Map<String, String> businessHours;

这是我为其设置了一些地图的字段,例如,键是星期日和星期一 ,但是在数据库中保存后,我得到了周一和周日的订单,我需要将它保存在周日周一的订单下,我该如何处理? 即使在保存订单之后就像我想要的一样,但在数据库中我看到不同的订单

【问题讨论】:

  • JSON 值中键的顺序无关
  • 那为什么会改变顺序呢?
  • jsonb 规范化表示以允许更好的存储和更有效的处理。由于键的顺序无关紧要,因此更改该顺序不会影响实际值

标签: java postgresql hibernate


【解决方案1】:

如果您想保留对象键的顺序,您应该按照Postgres docs 使用json 类型:

一般来说,大多数应用程序应该更喜欢将 JSON 数据存储为 jsonb,除非有非常特殊的需求,例如关于对象键排序的旧假设。

Postgres 在内部对存储为 jsonb 的数据进行排序和索引,以便更快地对其运行操作。您可以查看https://bitnine.net/blog-postgresql/postgresql-internals-jsonb-type-and-its-indexes/ 了解更多信息。

你可以改成:

    @Type(type = "json")
    @Column(columnDefinition = "json")
    private Map<String, String> businessHours;

您可以参考https://fullstackdeveloper.guru/2020/05/29/how-to-map-json-data-in-postgresql-database-to-a-hibernate-entity-column/了解更多信息。

【讨论】:

  • 可以,但不能声明 JsonType.class
  • 它是红色的所以无法理解 JsonType.class 是什么
  • @JackNickelson 尝试改用 JsonStringType.class 看看是否有帮助。
  • 我同意,但是在使用 setter 提供一些地图然后保存后,它给出了这个错误或强制转换表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2011-10-09
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多