当前位置: 首页 > 知识库问答 >
问题:

JPA(Eclipselink impl)延迟获取外部事务

邓兴为
2023-03-14

我正在使用glassfish和Java EE 6。我用Jersey创建了一个restful web服务,它在<code>Comment</code>表上执行搜索操作。每个注释都有一个作者

我有一个@Statless@Path('评论')EJB侦听Http请求。然后我有这个方法:

@GET
@Path("search")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<Comment> getComments(@QueryParam("criteria").....)

我的JPA查询获取了一堆注释。每个注释都与其作者有关联,因为它没有设置为LAZY,所以也会被获取,但是除了他的ID,大多数作者的字段都没有被检索(例如作者的姓名),即使我尝试将它们设置为@Basic(fetch=FetchType. EAGER)。当我执行以下操作时,它会被检索:

comment.getAuthor().getName()

但是,如果我在一个事务中,那么持久化上下文在我的方法的整个执行过程中都是活动的,那么这是可行的。但是,我不想在这里使用事务,因为这只是搜索数据库,并不改变任何数据(因此< code>@TransactionAttribute(...NOT_SUPPORTED)),所以当我调用上面的getter时,我只是得到一个“null”(没有获取数据),我不知道如何解决这个问题。

我不想使用事务,但我希望 Eclipselink 热切地获取作者的属性。

编辑:

因为我不在事务中,简单地说,我想要的是eclipselink为我从查询中得到的每个评论检索我的“comment.author.name”字段。

共有1个答案

公羊英达
2023-03-14

我现在使用非标准Eclipselink“LoadGroup”功能解决了这个问题:

LoadGroup lg = new LoadGroup();
lg.addAttribute("author.name");
query.setHint(QueryHints.LOAD_GROUP, lg);
result = query.getResultList();

不过我正在寻找一个标准的解决方案。

 类似资料:
  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 看了几个网页后,我仍然不明白为什么我的@ElementCollection会急切地加载。我的理解是,默认情况下任何@ElementCollection都应该总是懒洋洋地加载。正如您所看到的,情况并非如此--您将在本文末尾看到控制台的输出。我试图使用@ElementCollection(fetch=fetchType.lazy)注释强制执行惰性加载,但这并没有改变任何事情。有没有人可以解释一下,也可

  • 我试图开发以下代码,但它不起作用。我想使用apache Flink来延迟时间(在时间戳字段中指定的)与当前日期不同的事件。 样品: > 当前日期:2022-05-06 10:30 事件1[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-05-06 10:30”}-- 事件2[{“user1”:“1”,“user2”:“2”,“timestamp”:“2022-

  • 使用最新的jstree。我可以加载所有节点,但现在我正在尝试延迟加载节点。当我展开最后一个可见节点时,不会生成GET。 .js 从初始调用返回的JSON数据是[{"state":{"open": true,"禁用": false,"选择": false},"id":"-100","text":"Node1 Text","子":[{"state":{"open": false,"禁用": false

  • 我很难理解水印和允许迟到的概念。 以下是[邮件存档]的摘录|https://www.mail-archive.com/user@Flink。阿帕奇。组织/msg08758。html]这谈到了水印,但我还有几个问题。以下是引用的示例: 假设您有一个,具有2分钟的绑定和10分钟的翻转窗口,从12:00开始到12:10结束: 如果您具有以下流序列: 不允许迟到 当窗口操作符接收到<代码> 允许迟到3分钟

  • 我把来自https://bitnami.com/stack/cassandra的卡珊德拉安装在云机器上。我克隆了这台机器,所以我有2台机器。一个运行cassandra服务器(1节点cassandra集群),另一个充当客户端并向第一个服务器发出查询。 我使用YCSB-https://github.com/brianfrankcooper/YCSB来执行基准测试。我观察到服务器上的读取延迟非常低,只有

  • 我使用hibernate 5作为JPA实现,我有一个@OneToMany双向关系的问题。 这些是我的实体: 我希望这种关系在两个方向上都是惰性的,因为我想通过fetch JOIN手动获取数据,如下面的查询: 但我的问题是hibernate忽略了@ManyToOne(fetch=FetchType.LAZY),因此Jackson由于引用链的无限递归(StackOverflowerr)而中断,如下所示

  • 问题内容: 我正在使用带有node_redis的Node.js,并遍历一个对象并在Redis中查找数据,然后返回结果。 我有这样的设置: 问题在于,它会在完成对redis的调用之前循环通过。因此,在实际更新总值之前,将调用回调。由于延迟,它似乎也跳过了一些项目。 有没有更好的方法来解决这个问题? 谢谢! 编辑: 好的,所以我这样更新了它: 这似乎可行,它在适当的时间触发了回调,但是似乎只有最后一个