Spring Postgresql中的Java 8 JPA存储库逐行流
关于MySQL的阅读定义了某些查询提示@QueryHints注释,这些提示是MySQL逐行处理结果集所必需的。有人确切知道PostgreSQL需要什么吗 以下是MySQL存储库中的参考查询定义:Spring Postgresql中的Java 8 JPA存储库逐行流,spring,postgresql,java-8,spring-data,spring-data-jpa,Spring,Postgresql,Java 8,Spring Data,Spring Data Jpa,关于MySQL的阅读定义了某些查询提示@QueryHints注释,这些提示是MySQL逐行处理结果集所必需的。有人确切知道PostgreSQL需要什么吗 以下是MySQL存储库中的参考查询定义: @QueryHints(value = @QueryHint(name = HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE)) @Query(value = "select t from Todo t") Stream<Todo> stream
@QueryHints(value = @QueryHint(name = HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE))
@Query(value = "select t from Todo t")
Stream<Todo> streamAll();
它的PostgreSQL等价物是:
@QueryHints(value = @QueryHint(name = HINT_FETCH_SIZE, value = "1")
相反,当不满足条件行>=0时,应引发SQLException。MySQL的JDBC驱动程序不支持这一点
尽管在PostgreSQL中,您实际上可以设置大于1的值,以允许PostgreSQL的JDBC驱动程序进行一些缓存。50的数字似乎是合理的,除非你有不合理的宽行。您还可以选择此值作为预期行计数的一部分。在部署应用程序之前测试一些变体。PostgreSQL需要类似的设置,即ResultSet.TYPE\u FORWARD\u ONLY&特定的获取大小。但是,您可以根据自己的喜好控制提取大小。还有另一个限制:在这种可滚动模式下只能运行一个查询。上面的代码使用Integer.MIN_值,不知道postgresql会用它做什么,因此我的问题是。另外,你能再解释一下限制吗?所有连接都是这样吗?我假设其他查询可以并行运行?不,PostgreSQL的JDBC驱动程序允许在一条语句中执行多个查询。f、 前。插入。。。;选择…;:这在可滚动模式下是不允许的,而且通常不可移植。-在PostgreSQL中,获取大小不要使用负值。使用@QueryHintname=HINT\u FETCH\u SIZE,值=1表示逐行读取,>1表示逐批读取并带有一些缓存,0表示关闭可滚动性。相反,如果MySQL的JDBC驱动程序不满足条件rows>=0,则应抛出SQLException。这取决于您期望的行数和行宽。因此,我建议您测试多个变体。但是我预测fetch size=1不会是最快的,如果达到rowcount f.ex的数量,超过某个值,它会变得越来越慢。那么它实际上不会滚动任何内容