Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA相当于Oracle TopLink的addBatchReadAttribute_Jpa_Batch File_Toplink - Fatal编程技术网

JPA相当于Oracle TopLink的addBatchReadAttribute

JPA相当于Oracle TopLink的addBatchReadAttribute,jpa,batch-file,toplink,Jpa,Batch File,Toplink,我们使用的是JPA,当一组对象从查询返回时,通过外键为每个相关的子对象执行单独的查询 例如,在我们的授权实体类中,映射了以下客户端对象: @JoinColumn(name = "clientId", referencedColumnName = "clientId") @ManyToOne (fetch = FetchType.LAZY) @NotNull(groups = Default.class) private Client client; 当返回10个授权时,将执行10个客户端查询。

我们使用的是JPA,当一组对象从查询返回时,通过外键为每个相关的子对象执行单独的查询

例如,在我们的授权实体类中,映射了以下客户端对象:

@JoinColumn(name = "clientId", referencedColumnName = "clientId")
@ManyToOne (fetch = FetchType.LAZY)
@NotNull(groups = Default.class)
private Client client;
当返回10个授权时,将执行10个客户端查询。在TopLink中,我能够使用ReadAllQuery类的addBatchReadAttribute方法将这个数字设为1。根据TopLink文档,当访问任何批处理的零件时,零件都将在一次查询中读取,这允许零件所需的所有数据在一次查询中读取,而不是在n次查询中读取

这很好地工作了,为我们提供了一个使用带有10个ID的IN子句的单个查询

我读到的关于re:JPA的内容让我想到了批量加入或类似的东西:

hints = {@QueryHint(name = "eclipselink.batch", value = "p.client"), ... 
此策略有助于减少查询数量

但它也给了我更多的连接,可能会减慢速度 一些疑问 而且它似乎没有TopLink电话那么有效。 有没有一种方法可以获得使用WHERE子句中的单个查询的策略

提前谢谢。
Dave

在内部,QueryHint eclipselink.batch被转换为addBatchAttribute,因此您看到的行为应该是相同的。您创建的JPQL是否产生与本机TopLink API相同的查询?您可能在JPQL中有Fetch或其他连接?

EclipseLink支持几种类型的批量获取

看,,

不,没有。我发布的提示更改了许多查询以使用联接。TopLink addBatchReadAttribute。。。调用次数:选择*FROM authorization否我在上面发布的提示将一些查询转换为联接。addBatchReadAttribute。。。TopLink方法可以像这样旋转块:选择。。。来自授权-返回10条记录,每条记录引用不同的客户端记录选择。。。从ClientId=0的客户端选择。。。从ClientId=1的客户端。。。选择从ClientId=8的客户端选择。。。从ClientId=9的客户端进入此块:选择。。。从授权中选择。。。从ClientId位于0、1、2、3、4、5、6、7、8、9No中的客户端,我上面发布的提示将一些查询转换为联接。addBatchReadAttribute。。。TopLink方法可以像这样旋转块:选择。。。来自授权-返回10条记录,每条记录引用不同的客户端记录选择。。。从ClientId=0的客户端选择。。。从ClientId=1的客户端。。。选择从ClientId=8的客户端选择。。。从ClientId=9的客户端进入此块:选择。。。从授权中选择。。。来自ClientId位于0、1、2、3、4、5、6、7、8、9中的客户端再次感谢。