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

什么时候可以在事务外部加载JPA惰性加载的ManyToOne关系?

子车俊材
2023-03-14

我有一个JAX-RS资源类。它调用一个加载实体的无状态EJB(我们称之为parent)。

parent与另一个实体具有@ManyToOne关系(我们称之为child),并且配置为具有lazy的提取类型。

任何东西上都不会出现额外的事务性注释,因此无状态EJB的默认行为是在必要时启动事务,并在事务的业务方法完成后提交事务。

在调试器中,我观察到EJB返回的parentnull作为child的值,正如我所怀疑的那样。因此,惰性加载工作良好。

然后,我的资源类构建一个响应并将控制权交给JAX-RS内部。同样,没有打开的事务。

序列化之后,显示的JSON(在我的例子中)包含child的所有字段。JAX-RS内部的某些东西在某种程度上“膨胀”了事务外部的child引用。

我在一个调试器中观察到,确实在JAX-RS接管控制权之后的某个时刻,child引用变成了非null

如果重要的话,我将通过Glassfish 4.1和EclipseLink 2.5.2(同样,通过Glassfish 4.1)使用Jersey 2.10.4。

共有1个答案

闻人锦
2023-03-14

如果它真正“分离”了,那么就没有上下文,因此就没有加载。如果它仍然在上下文中,那么它显然可以加载字段。这是根据JPA规范。

当然,除非您使用的是特定于供应商的选项,否则您没有遵循JPA规范,因此在任何其他JPA实现中都不能依赖它...

 类似资料:
  • 我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。 为什么不工作是懒惰加载? 谢谢

  • 让CriteriaQuery加载多对一个关系而不明确地告诉它,我遇到了一些麻烦,而且要在查询中复制我的实体注释来使其工作,这似乎很奇怪: 除其他字段外,“我的实体计算机”包含以下关系: @ManyToOne(fetch=FetchType.Eage)@JoinColumn(name=“Employee”,nullable=false)private Employee=Null; 据我所知,当我加载

  • 我知道懒加载是做不到的,如果你在一对一的关系中有双向的关系。 所以我读了一篇关于如何使JPA OneToOne关系变懒的文章。 文章说你不能在一对一的关系中创建代理,但我不太理解。 我觉得多对一的关系和一对一的关系没有什么区别。他说,在多对一的关系中,您可以创建一个代理,因为您可以从fk获得值。 我觉得这两个是不一样的。我知道PK值相等,那么为什么不只有一对一的关系做懒加载呢?

  • 我在应用程序中工作。流程和往常一样:。 我用注释了服务层类,从而将该类中的每个方法都标记为事务性的。在服务类中,我调用以获取某个域对象,然后将其转换为对象,该对象将传递给Controller。为了将域对象转换为,我编写了另一个自定义静态类(只有静态方法的类),如,它将进行此转换。 现在,域对象有一些子对象(),它被懒洋洋地加载。因此,当我在中访问子getter方法时,会发出一个额外的数据库调用,该

  • 主要内容:1.准备调试,2.过程分析BeanDefinition存放的是Spring框架从xml中解析得到的bean信息 1.准备调试 bean.xml 2.过程分析 ClassPathXmlApplicationContext.java AbstractApplicationContext.java refresh(): 创建容器对象 ,获得的是DefaultListableBeanFactory AbstractRefresha

  • 我试着把我的头绕到相对较新的img属性“加载”上。 我知道,如果img具有load=“lazy”属性,那么它会告诉支持该属性的浏览器,在接近视口时可以加载该属性。 那么为什么不总是设置loading=“lazy”?那些立即出现在屏幕上的图像无论如何都会被渲染,因为它们已经在视口中了。因此,在这种情况下,基本上忽略了load=“lazy”。 在这个演示https://mathiasbynens.be