从Hibernate 5.2开始,我们可以使用该stream()方法而不是scroll()我们想要获取大量数据.
但是,当使用时scroll(),ScrollableResults我们能够通过在处理它之后从持久化上下文中驱逐对象和/或不时地清除整个会话来钩住检索过程并释放内存.
我的问题:
stream()方法,幕后会发生什么?hibernate.jdbc.fetch_size在JPA属性中设置了一些数字(例如1000),那么它如何与可滚动结果很好地结合?我在基于Spring的Web应用程序上有以下用例:
所以,鉴于我上面描述的要求,我的问题是:
FlatFileItemReader与一起使用了很多示例TaskExecutor。我在下面提供了示例(都带有XML和Java Config):
我已将自己的XML配置用于大型CSV(GB大小)的开箱即用JpaItemWriter。即使不设置save-state = false或进行任何特殊处理,似乎也没有问题。
现在,FlatFileItemReader已记录为不是线程安全的。
我的猜测是,JpaItemWriter通过持久保存集(即如果hashCode()和equals()覆盖实体的业务密钥,则没有重复)的集合来“发现”问题。但是,即使这样,由于非线程安全的读取和处理,也无法防止重复。
您能否澄清一下:FlatFileItemReader在分配了TaskExecutor的Tasklet 中使用开箱即用的方法是否正确/正确/安全?不论作家。如果没有,我们如何在理论上解释JPAItemWriter使用a时没有错误?
PS:我上面给出的示例链接FlatFileItemReader与TaskExecutor一起使用,而没有提及所有可能的线程安全问题...
如https://www.slideshare.net/mongodb/webinar-working-with-graph-data-in-mongodb 中所示,幻灯片 50可以$graphLookup在视图上使用以获得 2 级深度树结构在嵌套格式。
我有一个带有树节点的 MongoDB 集合作为具有以下格式的文档:
{ "_id" : { "$oid" : "5b1a952361c6fa3418a15660" },
"nodeId" : 23978995,
"name" : "settings",
"type" : "Node",
"parentId" : [ 23978893, 23979072, 23979081 ] }
Run Code Online (Sandbox Code Playgroud)
我创建了一个视图,如:
db.createView("treeView", "node", [
{
$graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
Run Code Online (Sandbox Code Playgroud)
我执行图形查找,如:
db.node.aggregate([
{ $match: {"nodeId": 23978786 } },
{
$graphLookup: {
from: "treeView",
startWith: "$nodeId",
connectFromField: "nodeId", …Run Code Online (Sandbox Code Playgroud)