Как реализовать дженерики, используя JPA / Hibernate EntityManager и EJB3.0?
-
30-09-2019 - |
Вопрос
У меня есть 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