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
为什么我的实体在使用Spring数据JPA加载时只是部分填充?_Jpa_Spring Data_Spring Data Jpa_Datanucleus - Fatal编程技术网

为什么我的实体在使用Spring数据JPA加载时只是部分填充?

为什么我的实体在使用Spring数据JPA加载时只是部分填充?,jpa,spring-data,spring-data-jpa,datanucleus,Jpa,Spring Data,Spring Data Jpa,Datanucleus,我使用SpringDataJPA和DataNucleus作为JPA持久性提供程序,并具有类似 interface BookRepository extends CrudRepository<Book, Long> { Book findByAuthorId(Long id); } 接口BookRepository扩展了Crudepository{ Book findByAuthorId(长id); } 如果我调用bookRepository.findByAuthorId(

我使用SpringDataJPA和DataNucleus作为JPA持久性提供程序,并具有类似

interface BookRepository extends CrudRepository<Book, Long> {
    Book findByAuthorId(Long id);
}
接口BookRepository扩展了Crudepository{
Book findByAuthorId(长id);
}
如果我调用
bookRepository.findByAuthorId()
然后访问
book.publishingHouse.manager.name
null
。与在字段完全正确填充时调用
bookRepository.findAll()
相反。我设置了
datanucleus.DetachAllOnCommit=true
datanucleus.maxFetchDepth=-1
(我还尝试了10)


知道原因吗?

如果没有定义任何其他事务边界,则在离开查询方法时,
EntityManager
将关闭。这意味着您得到的是分离的实体,而您得到的加载状态是由持久性提供程序使用的默认值决定的

您基本上有两种选择:

  • 让客户机(服务或控制器类)使用
    @Transactional
    保持
    EntityManager
    打开,从而使加载的实例有资格延迟加载,以便在使用实例时从存储中拉出数据。如果控制器或服务不够,您可能需要查看
    OpenEntityManagerInViewFilter
    /
    -拦截器
    ,该拦截器基本上保持
    EntityManager
    打开,直到呈现视图

  • 使用JPA 2.1实体图(有关详细信息,请参阅)或通过手动定义向查询显式添加获取连接来定义应显式获取的内容


如果没有定义任何其他事务边界,则在离开查询方法时,
EntityManager
将关闭。这意味着您得到的是分离的实体,而您得到的加载状态是由持久性提供程序使用的默认值决定的

您基本上有两种选择:

  • 让客户机(服务或控制器类)使用
    @Transactional
    保持
    EntityManager
    打开,从而使加载的实例有资格延迟加载,以便在使用实例时从存储中拉出数据。如果控制器或服务不够,您可能需要查看
    OpenEntityManagerInViewFilter
    /
    -拦截器
    ,该拦截器基本上保持
    EntityManager
    打开,直到呈现视图

  • 使用JPA 2.1实体图(有关详细信息,请参阅)或通过手动定义向查询显式添加获取连接来定义应显式获取的内容


它与拦截器一起工作。让我困惑的是,使用
findAll()
是可行的。我们正在将一个空的条件查询传递给
EntityManager
,用于
findAll()
。看起来DataNucleus对这些问题的处理方式有所不同。很高兴听到你的工作,虽然!它与拦截器一起工作。让我困惑的是,使用
findAll()
是可行的。我们正在将一个空的条件查询传递给
EntityManager
,用于
findAll()
。看起来DataNucleus对这些问题的处理方式有所不同。很高兴听到你的工作,虽然!