Как реализовать дженерики, используя JPA / hibernate EntityManager и EJB3.0? - PullRequest
0 голосов
/ 15 октября 2010

У меня есть slsb, содержащая мою бизнес-логику. Как я могу использовать дженерики для преобразования следующих трех методов в один универсальный метод?Первые два - это одна и та же БД, третья - это другая база данных.Также требуют ли методы дополнительной аннотации в отношении транзакции?

@PersistenceContext(unitName = "db")
private EntityManager myEntityManager;

@PersistenceContext(unitName = "db2")
private EntityManager myDB2EntityManager;

@TransactionAttribute(TransactionAttribute.Required)
public void crud(MyEntity myEntity) throws MyException {
 myEntityManager.merge(myEntity);
}

public void crud(ADifferentEntity aDifferentEntity) throws MyException {
 myEntityManager.merge(aDifferentEntity);
}

public void crud(DB2Entity db2Entity) throws MyException {
 myDB2EntityManager.merge(db2Entity);
}

Большое спасибо заранее.Ура! * * 1004

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Не уверен, что я полностью понимаю вопрос, но: Поскольку у вас есть два разных менеджера сущностей и две разные БД (при условии, что вы не сохраняете одни и те же данные в двух экземплярах одновременно на обеих БД, что, по-видимому, не выполняется), я думаю, что разумно использовать два разных метода в вашем интерфейсе. (Я бы назвал их по-другому, чтобы избежать путаницы, я думаю.)

Чтобы объединить первые два, как насчет использования общего интерфейса или унаследованного абстрактного базового класса и изменения типа параметра на этот общий тип?

0 голосов
/ 16 октября 2010

Если вам требуется объединить 2 сущности из 2 разных баз данных в одном методе, у вас должен быть настроен JTA - поскольку транзакция будет охватывать 2 базы данных.

Не слишком уверен, что вы пытаетесь сделать с обычными вещами ... Вы пытаетесь предоставить метод для кражи, например. T extends AbstractEntity, а затем в грубом методе

crud(T entity) {
    if (entity instanceof DB1Entity) then em1.merge(entity) 
      else em2.merge(entity)
}

???

или вы пытаетесь сделать горизонтальное разбиение?:

Многопользовательские источники данных - Spring + Hibernate ,

http://www.jroller.com/kenwdelong/entry/horizontal_database_partitioning_with_spring

...