У меня есть JPA-сущности, и я должен с ними работать.До сих пор огромный статический класс базы данных делал свою работу.Это некрасиво, потому что у каждого метода открытого интерфейса был частный эквивалент, который использовал EntityManager для выполнения транзакций.Но я мог бы решить это, имея статический em тоже!Однако мне интересно, подходит ли это дизайн, тем более что класс отвечает за многие вещи.Неудивительно, что код, который я нашел в сети реальных проектов, был непростым для понимания (тогда я мог бы также вспомнить свой код).Код здесь легко понять, хотя, может быть, более общий?Во всяком случае, на вершине JDBC.И все же, проницательно, зачем использовать фабрики и синглтоны для DAO?
Я хотел бы выделить экземпляр em следующим образом:
private static final Map<String, EntityManager> ems = new HashMap<String, EntityManager>();
private final EntityManager em;
private final EntityManagerFactory emf;
public void beginTransaction() {
em.getTransaction().begin();
}
public void commitTransaction() {
em.getTransaction().commit();
}
public Database(final String persistenceUnitName) {
if(ems.containsKey(persistenceUnitName)){
em = ems.get(persistenceUnitName);
}else{
ems.put(persistenceUnitName, em = Persistence.createEntityManagerFactory(persistenceUnitName).createEntityManager());
}
emf = em.getEntityManagerFactory();
this.persistenceUnitName = persistenceUnitName;
}
Этот способ создания экземпляров является стандартным, но при этом поддерживаетсяSingleton Connection / EntityManager.С другой стороны, я задавался вопросом, была ли необходимость в одноэлементных ems в первую очередь?Преимущество заключается в том, что с несколькими ems я сталкиваюсь с проблемами блокировки (не используя em.lock ()).
Есть какие-либо отзывы?Любой реальный или учебный код, который демонстрирует DAO с JPA2 и eclipselink?