Я работаю над проектом 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. обновите себя, Б не знает, А обновил. После слияния B jpa поможет нам объединить A, используя сущность в списке B A.
чтобы решить эту проблему, я решил использовать один менеджер сущностей и поместить все операции с базой данных в один поток. Потом вылезает новая проблема.
когда транзакция активна и транзакция должна быть открыта для объекта между
transaction.begin();
....
transaction.end();
однако существует много потоков, и эти потоки также могут изменить сущность.
мой вопрос: как использовать jpa в разработке java se? Благодарность
java.util.concurrent.ReentrantReadWriteLock
для управления уровнем доступа к данным... - person home   schedule 10.06.2012