【发布时间】:2023-04-01 12:55:02
【问题描述】:
我希望能够使用一个实体管理器为涉及不同实体对象的 CRUD 操作提交多个事务。例如,我希望能够在一个实体管理器会话期间删除一个猫实体对象并创建一个新的狗实体对象。我通过让 catService 和 dogService(可以 CRUD 对象的对象)扩展 GenericService 来实现这一点:
public abstract class GenericService<T> {
private Class<T> type;
protected static EntityManager entityManager;
public GenericService() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
type = (Class) pt.getActualTypeArguments()[0];
if (entityManager == null || !entityManager.isOpen()) entityManager = GetEntityManager.getInstance(); // zo kunnen meerdere services gebruik maken van dezelfde entitymanager sessie. 1 operation per sessie is een antipattern namelijk. Beter meerdere operations in 1 sessie doen.
}
// sluit entityManager en daarmee dus ook de sessie af.
public void close(){
entityManager.close();
}
现在两个服务共享同一个实体管理器。现在我可以进行多个事务并仅在最后一个 Service 对象上调用继承的 close() 方法,然后关闭共享实体管理器。
我打算制作一个 web 应用程序,所以我想知道是否通过让在不同实体对象上运行的不同 serviceObjects 共享它们来更有效地使用实体管理器会话与打开和关闭新会话(实体经理)只需一笔交易。
谢谢。
【问题讨论】:
标签: java database hibernate hibernate-entitymanager