Sql postgres中x查询的基本选择*的奇怪结果

Sql postgres中x查询的基本选择*的奇怪结果,sql,postgresql,jpa,jdbc,Sql,Postgresql,Jpa,Jdbc,在执行basicSELECT*FROM programquery时,我注意到一些奇怪的行为: 我使用GenerationType.IDENTITY并一次插入整个程序对象列表。我可以将ORDER BY db_id添加到我的查询中,但我对发生这种行为的原因很感兴趣。直到今天还不错。 还尝试了GenerationType.AUTO,但没有任何更改 我的模型: @Entity @Table(name = "program", indexes = { @Index(name = &q

在执行basic
SELECT*FROM program
query时,我注意到一些奇怪的行为:

我使用
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程序…

在PosrgreSQL中不保证顺序,除非指定了顺序

您的查询不包含order by。没有order by,就无法保证查询结果的顺序。您所拥有的可能不寻常,但并非意外。无关,但:为什么不在
jsonb
(或至少
JSON
)列中存储JSON值?除非指定顺序,否则PosrgreSQL中不保证顺序@这是服务器上的db,rest控制器返回json,我用android应用程序访问它。
category
列是我唯一插入字符串作为json的列,因为每行可能包含0-n个类别,所以我认为这可能是在android中以json数组形式读取数据的最简单方法。将
category
存储在
json
而不是字符串中是否会对我有好处?出于对您的问题的好奇,我尝试将
编译组:“com.vladmichea”,名称:“hibernate-types-52”,版本:“2.9.12”
添加到我的gradle中,并将“@Type(Type=“json”)”添加到我的分类列中,但它不起作用……您应该为存储的值选择正确的数据类型。您也不在
varchar
列中存储数字或日期值。您可以从
jsonb
提供的语法检查中获益,并且可以在不增加强制转换开销的情况下使用多个语法检查。顺便说一句:与276或242相比,255的任意限制并没有给您带来任何性能或存储优势(如果您假设是这样的话)。如果您的模糊层(也称为“ORM”)不能正确使用正确的数据类型,我会质疑它的选择。