Как реализовать дженерики, используя JPA / Hibernate EntityManager и EJB3.0?

StackOverflow https://stackoverflow.com/questions/3942150

Вопрос

У меня есть 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);
}

Спасибо заранее. Ваше здоровье!

Это было полезно?

Решение

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

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

Другие советы

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

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

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

???

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

Multi-User DataSources - Spring + Hibernate,

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top