我正在开发一个使用 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 ,当在 FS 中找到新的 A 时,B 将被更新。
由于实体管理器关闭,B 的 A 列表中的实体已过期,这意味着当 A 更新自身时,B 不知道 A 更新了。一旦合并 B ,jpa 将帮助我们使用 B 的 A 列表中的实体合并 A。
为了解决这个问题,我决定使用一个实体管理器并将所有数据库操作放在一个线程中。然后新的问题就出来了。
当交易处于活动状态并且交易应该为实体之间打开时
transaction.begin();
....
transaction.end();
但是有很多线程正在运行,这些线程也可能会改变实体。
我的问题是:如何在 java se 开发中使用 jpa ?谢谢