【发布时间】:2020-10-31 17:55:41
【问题描述】:
在执行基本的SELECT * FROM program 查询时,我注意到一些奇怪的行为:
我正在使用GenerationType.IDENTITY 并一次插入整个程序对象列表。我可以将ORDER BY db_id 添加到我的查询中,但我很感兴趣为什么会发生这种行为。直到今天还不错。
也尝试了GenerationType.AUTO,但没有任何改变......
我的模特:
@Entity
@Table(name = "program", indexes = { @Index(name = "channelindex", columnList = "channel", unique = false) })
public class OutputProgram {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer db_id;
private String category;
private String title;
....
每次都会插入一些8k的程序...
【问题讨论】:
-
您的查询不包含 order by。没有 order by 就无法保证查询结果的顺序。你所拥有的可能不寻常,但不会出乎意料。
-
不相关,但是:为什么不将 JSON 值存储在
jsonb(或至少json)列中? -
PosrgreSQL 中不保证顺序,除非指定。 postgresql.org/docs/current/queries-order.html
-
@a_horse_with_no_name 这是服务器上的 db,rest 控制器返回我使用我的 android 应用程序访问的 json。
category列是我将字符串作为 json 插入的唯一一个,因为每一行可能包含 0-n 个类别所以我认为这可能是将android中的数据作为json数组读取的最简单方法。我会受益于将category存储在json而不是String 中吗?对您的问题感到好奇,我尝试将compile group: 'com.vladmihalcea', name: 'hibernate-types-52', version: '2.9.12'添加到我的 gradle 并将 '@Type(type = "json")' 添加到我的类别列但它不起作用...... -
您应该为您存储的值选择正确的数据类型。您也不会在
varchar列中存储数字或日期值。您可以从jsonb为您提供的语法检查中受益,并且您可以使用许多JSON operators 而无需转换开销。顺便说一句:255 的任意限制不会给您带来任何性能或存储优势,例如276 或 242(以防您假设。如果您的混淆层(又名“ORM”)无法正确使用正确的数据类型,我会质疑它的选择。
标签: sql postgresql jpa jdbc