【问题标题】:HashSet.addAll( list from repository query ) causes InvalidDataAccessApiUsageExceptionHashSet.addAll(来自存储库查询的列表)导致 InvalidDataAccessApiUsageException
【发布时间】:2016-06-15 13:02:55
【问题描述】:

我有以下代码:

HashSet hashSet = new HashSet(); 
                     hashSet.addAll(partnerRepository.findByVatNumber(partner));
hashSet.addAll(etc...);

我收到以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: 
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: enone.domain.PartnerEntity; nested exception is java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: domain.PartnerEntity
        at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:381)
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:157)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
        at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
        at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodIntercceptor.invoke(CrudMethodMetadataPostProcessor.java:111)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
        at com.sun.proxy.$Proxy75.findByVatNumberExcludingPartner(Unknown Source)

我怀疑它可能与延迟加载有关?虽然这有点奇怪,因为我没有调用保存方法,只是将结果添加到哈希集中。

解释?

【问题讨论】:

    标签: hibernate exception collections spring-data-jpa


    【解决方案1】:

    事实证明,这个问题根本与实际的 HashSet 无关,而是与存储库有关。

    我不是比较合作伙伴的 ID,而是比较合作伙伴和合作伙伴。 partnerEntity 虽然具有延迟加载的字段,并且另外来自另一个会话/查询。

    我替换了这个:

    @Query("select p from PartnerEntity p where p.country = ?1 AND NOT p.id = ?2")
        List<PartnerEntity> findByCountryNameExcludingPartner(CountryEntity country, PartnerEntity partnerEntity);
    

    有了这个:

    @Query("select p from PartnerEntity p where p.country = ?1 AND NOT p.id = ?2")
    List<PartnerEntity> findByCountryNameExcludingPartner(CountryEntity country, Integer partnerEntity);
    

    现在它正在工作。同样在通话中,我发送的是partnerEntity.getId(),而不是整个实体。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多