sql >> Databáze >  >> NoSQL >> MongoDB

TransactionRequiredException Provedení aktualizačního/smazat dotazu

Nejsem si jistý, zda to pomůže vaší situaci (tedy pokud stále existuje), nicméně poté, co jsem prohledal web a našel podobný problém.

Vytvářel jsem nativní dotaz z trvalého EntityManager, abych provedl aktualizaci.

Query query = entityManager.createNativeQuery(queryString);

Zobrazila se mi následující chyba:

způsobeno:javax.persistence.TransactionRequiredException:Probíhá dotaz na aktualizaci/smazání

Mnoho řešení navrhuje přidat @Transactional do vaší metody. Jen to nezměnilo chybu.

Některá řešení navrhují požádat EntityManager o EntityTransaction abyste mohli zavolat begin a zavázat se. Toto vyvolá další chybu:

způsobeno:java.lang.IllegalStateException:Není povoleno vytvářet transakci na sdíleném EntityManager – místo toho použijte transakce Spring nebo EJBCMT

Pak jsem zkusil metodu, o které většina webů tvrdí, že je pro použití správci entit spravovaných aplikací a nikoli správou kontejnerů (což věřím, že Spring je), a to bylo joinTransaction() .

S @Transactional zdobení metody a následné volání joinTransaction() na objektu EntityManager těsně před voláním query.executeUpdate() a aktualizace mého nativního dotazu fungovala.

Doufám, že to pomůže někomu dalšímu s tímto problémem.



  1. Dotaz MongoDB pro vrácení pouze vloženého dokumentu

  2. Vraťte pouze odpovídající prvky dílčího dokumentu v rámci vnořeného pole

  3. Aktualizujte více prvků v poli v mongodb

  4. Programování databáze Python s MongoDB pro začátečníky