Кога се връща методът flush() на EntityManager?

Използвам EntityManager, за да съхранявам данни в моята база данни.

public void save(X x){
    entityManager.persist(x);
    entityManager.flush();
    triggerDataChange();
}

След изтриване на данните извиквам метода triggerDataChange(), за да изпратя съобщение до външен компонент, който зависи от новозаписаните данни.

Въпрос: Мога ли да разчитам на връщане на метода flush след като данните са били записани успешно в базата данни?

Благодаря за вашата помощ.


person herzrasen    schedule 21.02.2012    source източник
comment
Да, промиването ангажира промените в DB. (Но все още може да се върне назад.)   -  person K.C.    schedule 21.02.2012
comment
Между другото: ако използвате хибернация, вижте възможните режими на промиване: docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/   -  person K.C.    schedule 21.02.2012
comment
Мисля, че когато той казва ангажира промените в DB, ​​той има предвид не ангажира промените в DB 8=}. Другото ви приложение ще трябва да чете некоммитирани данни от db, което не е обичайно нещо. Наистина това, което вероятно искате, е да ангажирате данните (т.е. да завършите транзакцията) и след това да извикате вашата външна система. В противен случай външната система може да вземе решение въз основа на данни, които могат да бъдат върнати назад.   -  person davidfrancis    schedule 21.02.2012
comment
@davidfrancis Съжалявам, не разбирам. Може би това е моят английски (не е роден). Мислех, че е както следва: entityManager.flush() : изпразнете вътрешния кеш на SQL инструкциите и го изпълнете незабавно в базата данни. Вижте: stackoverflow.com/questions /4275111/   -  person K.C.    schedule 21.02.2012
comment
Предполагам, че вашият английски е много по-добър от моите жалки опити с родния ви език!! Да, зависи от вашата дефиниция за ангажиране. Аз лично бих избягвал да използвам commit в базата данни, освен ако не имате предвид извършване на транзакция - вероятно е по-добре да кажете персистиране. напр. flush запазва данните в базата данни, но все още може да бъде върнат назад.   -  person davidfrancis    schedule 21.02.2012
comment
А, да, това се опитвах да кажа. Благодаря за пояснението.   -  person K.C.    schedule 21.02.2012


Отговори (1)


Вашата транзакция е същата, така че дори ако транзакцията се върне назад, тя се връща напълно. Flush няма да ангажира транзакцията, тъй като тя все още може да бъде върната назад. Така че във вашето изпълнение каквото и да правите, е добре.

person Amit Deshpande    schedule 27.03.2012