Prepísal som správcu entít mojej aplikácietováreň sa od jari podarilo kontajnerom riadiť a narazila na problém. Pri vytváraní entity existujú časy, kedy som ju musel vyžiadať v rámci tej istej transakcie, v ktorej bola pôvodne vytvorená, predtým, než bola na konci automaticky splachovaná. Na jar by manažér entity (verím) automaticky vyprázdnil kontext pred spustením nájdenia a mohol vrátiť správny objekt, ale v jboss sa metóda find vráti null.
Tu je vzorka problému:
@PersistenceContext
private EntityManager entityManager;
private void test(){
Person person = new Person("firstname", "lastname", "email", "user", "pass", Person.PersonType.admin);
entityManager.persist(person);
assert person.getId() != null;
Person person2 = entityManager.find(Person.class, person.getId());
assert person2 != null; //fail in jboss, ok in Spring
}
Pokúsim sa pridať entityManager.flush()
hovor medzi persist()
a find()
metódy, jboss hodí a javax.persistence.TransactionRequiredException: no transaction is in progress
chyba, bez ohľadu na to, či hodím @Transakčné poznámky okolo metódy / triedy, na ktorom beží test.
Súbory mojej perzistencie.xml <property name="org.hibernate.FlushMode" value="auto"/>
, ale zdá sa, že nefunguje.
Existuje nejaká vlastnosť konfigurácie, ktorú som nechal oznámiť jbossovi, aby vypustil svoj kontext do databázy pred spustením príkazu Nájsť? Alebo objednávam nesprávne svoje vyhlásenia?
Ja som dal svoje persistence.xml a my-ds.xml súbory na pastebíne.
Vdaka za pomoc.
editovať
Vyriešený. Pozrite si pripomienky nižšie
odpovede:
0 pre odpoveď č. 1Krátko po odovzdaní súboru spring-data.xml som si uvedomil, že som zabudol na fazuľa. Po pridaní, @Transactional tag pracoval podľa očakávania a problém bol vyriešený.