【发布时间】: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