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

@ManyToOne(Fetch=FetchType.lazy)惰性加载不起作用

干亮
2023-03-14

我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。

@Entity
@Table(name="APLICACIONES_TB")
public class Aplicacion implements Serializable {

  @Id
  @Column(name="COD_APLICACION_V")
  private long codAplicacionV;

  @Column(name="APLICACION_V")
  private String aplicacionV;

  @OneToMany(mappedBy="aplicacion")
  private Collection<Prestacion> prestaciones;

  ... getters and setters
}

@Entity
@Table(name="PRESTACIONES_TB")
public class Prestacion implements Serializable {

  @Id
  @Column(name="COD_PRESTACIONES_V")
  private String codPrestacionesV;

  @Column(name="DESCRIPCION_V")
  private String descripcionV;

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name = "COD_APLICACION_V")    
  private Aplicacion aplicacion;

  ... getters and setters ...
}
@Stateless
@LocalBean
public class DocuEJB implements DocuEJBLocal
{
  @PersistenceContext(name="DocuEjb", type=PersistenceContextType.TRANSACTION)
  private EntityManager em;

  public Prestacion getResult(String name)
  {
    return em.createNamedQuery("ExampleQueryName", Prestacion.class).getSingleResult();
  }
}
@ManagedBean(name = "ManagedBean")
@RequestScoped
public class ManagedBean
{   
  @EJB DocuEJB docuEjb;

  public String doSomething()
  {
     Prestacion entity = docuEjb.getResult("egesr");

     if (entity != null)
     {
        // It should return null because 'entity' should be detached
        Aplicacion app = entity.getAplicacion();

        // but 'app' entity is not null, ¿why not?
        System.out.println (app.getCodAplicacionV());
     }
  }
}
System.out.println (app.getCodAplicacionV());

为什么不工作是懒惰加载?

谢谢

共有1个答案

吴高峰
2023-03-14

尝试在doSomething()上添加@transactional,我认为您的事务管理器配置得不好。

您可以在这里看到正式的spring文档。在任何情况下,您可以添加您的Spring配置,以便我们可以更好地帮助您。:)

 类似资料:
  • 这是我的模型: 以下是表格: 这些实体是: 我得库: org.hibernate:hibernate-core:jar:4.2.17.final:compile org.hibernate.common:hibernate-commons-annotations:jar:4.0.2.final:compile org.hibernate.javax.persistence:hibernate-jp

  • 我有两个表:和。 在类中,我声明了字段,如下所示: 当我获得列表时,也被加载(我看到了许多单独的SELECT查询)。但我希望是惰性加载的,而不是与一起提取的。 对于其他表,如果引用的列是主键,则结果与预期一样(使用懒惰加载)。在我的示例中,不是表的主键,并且Hibernate不使用惰性加载。 你能告诉我怎样实现那个目标吗?

  • 我谷歌了很多,这是真的奇怪的Spring Boot(最新版本)可能没有懒惰加载是不工作的。以下是我的代码片段: 我的资源: 我的服务: 编辑2: 对于规范构建,我有:

  • 我正在使用Springjpa和龙目岛来定义爪哇豆主题。每个主题都会有很多评论。我的一吨配置是 我创建的restful api是这样的。序列化似乎是问题所在,它总是获取注释。正如Chris所说,我添加了,它似乎解决了问题。但是如果我想加载注释怎么办,不会返回序列化中的注释。

  • 我正在尝试< code>fetchType的示例。懒惰,但是在调试代码时,似乎< code>fetchType。懒惰不起作用。 实体bean:地址 添加了属性为fetch=fetchType的注释@Basic。懒散地在地区赛场上。 我的实体bean由以下代码定义: 使用上述实体 Bean 的方法: 因此,在方法调用之后,当我检查地址对象时,它已经填充了区域字段。 请让我知道我是否缺少某些配置,或者

  • 我还有以下两个类,它们是由我的测试模型生成的: 在DBContext的构造函数中,我显式启用了延迟加载,甚至不需要: 后来我打电话给房子列表: 在标记的断点之后,我预期,由于延迟加载,与房屋相关联的所有人员此时都不会加载。我没有访问一个人,为什么要加载他们?但是它们被加载,因为我的调试器向我显示了所有的name属性。 有人能解释一下这种行为吗?为什么惰性加载不起作用?