這是我的物體:
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
@Entity
@Table(name = "GITTBUSUARIS")
public class Usuari {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USUARIS_ID")
private Integer id;
@Column(name = "USUARIS_CODI")
private String codi;
@Column(name = "USUARIS_NOM")
private String nom;
// @OneToMany(cascade = CascadeType.ALL, mappedBy = "id.usuari", fetch = FetchType.EAGER)
// private Set<PermisUsuari> permisos;
}
如您所見,permisos欄位已注釋。
這是我的存盤庫:
@RequiredArgsConstructor
public class ReactiveJpaSpecificationExecutorBase<T> implements ReactiveJpaSpecificationExecutor<T> {
private final Mutiny.SessionFactory sessionFactory;
@Override
public Mono<T> findOne(Specification<T> spec) {
CriteriaQuery<T> criteriaQuery = this.buildQuery(spec, Sort.unsorted());
return this.sessionFactory
.withSession(session -> session.createQuery(criteriaQuery).getSingleResultOrNull())
.convert().with(UniReactorConverters.toMono());
}
}
上面的代碼作業正常。但是,當我取消注釋permisos欄位時,我會收到以下例外訊息:
Failed to execute statement [select rol0_.ROLS_ID as rols_id1_12_0_, rol0_.ROLS_CODI as rols_cod2_12_0_, rol0_.ROLS_DENOMINACIO as rols_den3_12_0_ from GITTBROLS rol0_ where rol0_.ROLS_ID=@P1]: could not load an entity: [cat.gencat.clt.git.backend.model.persistency.Rol#1]
java.util.concurrent.CompletionException: java.lang.IllegalStateException: Session/EntityManager is closed
我正在達到我的代碼:
@RestController
@RequestMapping(value = "/qdcf")
@RequiredArgsConstructor
@Timed
public class QdCFController {
private final QdCFService qdcfService;
private final UsuariRepository usuariRepository;
@GetMapping("/user")
public Mono<Usuari> user() {
return this.usuariRepository.findOne(UsuariSpecs.hasCodi("11111111A"));
}
}
我怎樣才能讓每個執行緒都打開會話?
uj5u.com熱心網友回復:
發生錯誤是因為應用程式正在嘗試加載物體Rol。您沒有Rol在問題中顯示與的關聯,但我認為這是一個懶惰的關聯。
Hibernate Reactive 不會像 Hibernate ORM 那樣按需加載惰性關聯。如果是這種情況,您有兩種選擇:
- 使用條件中的 fetch join 急切地加載關聯
- 獲得結果后獲取角色。假設關聯被稱為
roles,它應該看起來像:return this.sessionFactory .withSession(session -> session .createQuery(criteriaQuery).getSingleResultOrNull() .onItem().ifNotNull().call( result -> Mutiny.fetch(result.getRoles()) ) ) .convert().with(UniReactorConverters.toMono());
我需要查看所有相關物體的映射以幫助您更多
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521217.html
標籤:休眠休眠反应
