我有一个slsb保存我的业务逻辑,如何使用泛型将以下三种方法更改为一个通用方法?前两个是相同的db,第三个是不同的数据库。这些方法还需要与事务相关的进一步注释吗?
@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);
}
非常感谢提前。 干杯!
答案 0 :(得分:2)
不确定我是否完全理解这个问题,但是: 由于你有两个不同的实体管理器和两个不同的数据库(假设你没有同时将相同的数据保存到两个数据库中,看起来你不是这样),我认为有两种不同的方法是合理的。在你的界面。 (我会以不同的方式命名,以避免混淆我认为。)
要合并前两个如何使用公共接口或继承的抽象基类并将参数类型更改为该公共类型?
答案 1 :(得分:0)
如果您需要在同一方法中合并来自2个不同数据库的2个实体,则应配置JTA - 因为事务将跨越2个数据库。
不太确定你要对通用的东西做什么......你是否试图提供一种方法来解决这个问题,例如:一个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