Работя върху проект на java se, който използва jpa за запазване на данни с база данни.
В момента получавам нов мениджър на обекти за всяка операция в базата данни и го затварям, когато извикването на функция приключи. като
public void save(T entity){
em = getNewEntity();
em.persisty(entity);
em.close;
}
но е много трудно да се управлява връзката много към много. например
имам обект A, който има връзка много към много с обект B. и имат CascadeType.MERGE.
след като създам A, създавам B и изпълнявам множество нишки, за да генерирам информация както за A, така и за B. но понякога B запазва остарелите от A, ако обединя B, тогава данните на A ще бъдат изчистени.
например . A е музика, B е музикален албум, така че едно B ще има списък A. Друга нишка ще прочете музикални метаданни и ще получи информация за музикален маркер и ще актуализира A, B ще бъде актуализиран, когато нов A бъде открит във FS.
Тъй като мениджърът на обекти е затворен, обектите в списъка A на B са остарели, което означава, че когато A актуализира се, B не знае, че A се актуализира. Веднъж Merge B, jpa ще ни помогне да обединим A, като използваме обекта в списъка A на B.
за да разреша този проблем, решавам да използвам един мениджър на обекти и да поставя всички операции с базата данни в една нишка. Тогава излиза нов проблем.
когато транзакцията е активна и транзакцията трябва да се отвори за обекта между
transaction.begin();
....
transaction.end();
обаче има много работещи нишки и тези нишки също могат да променят обект.
въпросът ми е: как да използвам jpa в разработката на java se?. Благодаря
java.util.concurrent.ReentrantReadWriteLock
за контрол на вашия слой за достъп до данни... - person home   schedule 10.06.2012