【问题标题】:cannot load/fetch mapped collection in hibernate criteria request无法在休眠条件请求中加载/获取映射集合
【发布时间】:2021-09-04 09:12:34
【问题描述】:

我在实体上发出休眠标准请求,同时尝试获取映射到该实体的其他项目的集合并获得异常“集合被驱逐;嵌套异常是 org.hibernate.HibernateException:集合被驱逐” . 我使用springboot、hibernate、postgres

这里是主要实体

public class EntityA {

   private Integer id;
   private String name;
   
   @OneToMany(mappedBy = "entityA")
   @JsonIgnore
   private Set<EntityA_EntityB> association = new HashSet<>();
   
   @Override
   public String toString() {
   
   public void addEntityA_EntityB(EntityA_EntityB enAB) {
        association.add(enAB);
   }

这是我无法在查询中获取的关联实体

@Entity
@Table(name = "ENTITYA_ENTITYB")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode   
public class EntityA_EntityB {

   @EmbeddedId
    private EntityA_EntityB_Id id = new EntityA_EntityB_Id();

    @ManyToOne
    @MapsId("entityAId")
    @JsonIgnore
    private EntityA entityA;

    @ManyToOne
    @MapsId("entityBId")
    @JsonIgnore
    private EntityB entityB;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    @JsonIgnore
    private User user;

    @Override
    public String toString() {

这里是关联表的另一边实体

public class EntityB {

   private Integer id;
   private String name;

这里是请求所在的行

"app.fetch("association", JoinType.INNER);"

导致异常

@Repository
public class EntityARepositoryCustomImpl implements EntityARepositoryCustom {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public List<EntityA> findEntityABySearch(List<String> searchs) {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<EntityA> query = cb.createQuery(EntityA.class);
        Root<EntityA> app = query.from(EntityA.class);
        app.fetch("association", JoinType.INNER);

        Path<String> namePath = app.get("name");

        List<Predicate> predicates = new ArrayList<>();
        for (String search : searchs) {
            predicates.add(cb.like(namePath, "%"+search+"%"));
        }
        query.select(app)
                .where(cb.or(predicates.toArray(new Predicate[predicates.size()])));

        return entityManager.createQuery(query)
                .getResultList();
    }
}

完整的错误信息如下

collection was evicted; nested exception is org.hibernate.HibernateException: collection was evicted

【问题讨论】:

    标签: java postgresql spring-boot hibernate hibernate-criteria


    【解决方案1】:

    我找到了解决方案:通过删除 lombok 的 @Data 和 @EqualsAndHashCode,加载集合。 lombok的hascode和equals可能包含关联信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多