Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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
Java 无法在具有字节码增强的Hibernate中获取LazyToOne实体_Java_Hibernate_Fetch_Lazy Loading_Byte Code Enhancement - Fatal编程技术网

Java 无法在具有字节码增强的Hibernate中获取LazyToOne实体

Java 无法在具有字节码增强的Hibernate中获取LazyToOne实体,java,hibernate,fetch,lazy-loading,byte-code-enhancement,Java,Hibernate,Fetch,Lazy Loading,Byte Code Enhancement,我最近通过Hibernate EnhanceMaven插件将字节码增强引入到我的Hibernate项目中。我确实需要能够延迟初始化某些字段,以解决表示文档的实体中@Lob字段的性能问题,并且延迟初始化整个实体不是一个选项 然而,我发现在引入字节码增强后,我的其他惰性@ManyToOne字段都无法获取。我执行包含fetch的查询,但结果返回中所需的实体为null。我知道该字段在数据库中不是空的,如果我删除hibernate enhance maven插件并重新编译fetch,它将按预期工作 下面是

我最近通过Hibernate EnhanceMaven插件将字节码增强引入到我的Hibernate项目中。我确实需要能够延迟初始化某些字段,以解决表示文档的实体中@Lob字段的性能问题,并且延迟初始化整个实体不是一个选项

然而,我发现在引入字节码增强后,我的其他惰性@ManyToOne字段都无法获取。我执行包含fetch的查询,但结果返回中所需的实体为null。我知道该字段在数据库中不是空的,如果我删除hibernate enhance maven插件并重新编译fetch,它将按预期工作

下面是我试图检索的主要实体(Office)和我试图获取的惰性多功能实体(Document)

我设置了标准,并尝试使用JPQL从数据库中提取

    String hql = "select _it from com.mycom.model.Office _it left join fetch _it.businessPlan as a1_businessPlan where _it.id = :p1";
    Query query = session.createQuery(hql).setParameter("p1", officeId);
    return query.setCacheable(true).list();
这给了我我的办公室,但如果我有字节码增强,就没有文档;如果我没有字节码增强,它给了我我的办公室和文档

我不知所措。尽我所能,我应该把它设置正确。我错过了一些东西,但我真的不知道是什么。我尝试使用CriteriaBuilder作为测试,只是想看看它是否有不同,但结果是一样的:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Office> query = builder.createQuery(Office.class);
Root<Office> root = query.from(Office.class);
root.fetch("businessPlan", JoinType.LEFT);
query.select(root).where(
        builder.equal(root.get("id"), officeId)
    );
Office testOffice = session.createQuery(query).getSingleResult();
System.out.println(testOffice.getBusinessPlan());//is null
直接在我的数据库上运行它,可以得到我想要的纯原始的东西

目前,我正在使用Hibernate 5.4.2.Final,正如您所看到的,它包括Envers

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Office> query = builder.createQuery(Office.class);
Root<Office> root = query.from(Office.class);
root.fetch("businessPlan", JoinType.LEFT);
query.select(root).where(
        builder.equal(root.get("id"), officeId)
    );
Office testOffice = session.createQuery(query).getSingleResult();
System.out.println(testOffice.getBusinessPlan());//is null
Hibernate: 
select 
    office0_.ID as ID1_94_0_, 
    ...
    document1_.ID as ID1_121_1_, 
    document1_.CONTENTTYPE as CONTENTTYPE2_121_1_, 
    document1_.DOCUMENTNAME as DOCUMENTNAME3_121_1_, 
    document1_.PDF as PDF4_121_1_ 
from 
    OFFICES office0_ left outer join DOCUMENTS document1_ on office0_.FK_DOCUMENT=document1_.ID 
where 
    office0_.ID=?