我正在开发一个使用jpa来保存数据库的java se项目。
现在我为每个数据库操作获取一个新的实体管理器,并在函数调用结束时关闭它。像
public void save(T entity){
em = getNewEntity();
em.persisty(entity);
em.close;
}
但很难管理多对多的关系。
例如
我有一个与B实体有多对多关系的实体。
他们有CascadeType.MERGE。
一旦我创建A,我创建B,并运行多个线程来生成A和B的信息。 但有时B保持A的过时,如果我合并B,则A的数据将被清除。
例如,。 A是音乐,B是音乐专辑,所以一个B将有一个A列表。另一个线程将读取音乐元数据并获取音乐标签信息并更新A,B将在FS中找到新的A时更新 由于实体经理关闭,B列表中的实体已过时,这意味着当A更新本身时,B不知道A已更新。一旦合并B,jpa将帮助我们使用B&A的A列表中的实体合并A.
为了解决这个问题,我决定使用一个实体管理器并将所有数据库操作放到一个单独的线程中。然后出现了新问题。
当事务处于活动状态且事务应该在
之间为实体打开时transaction.begin();
....
transaction.end();
然而,有许多线程正在运行,这些线程也可能改变实体。
我的问题是: 如何在java se开发中使用jpa?感谢