0

我有一个 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);
}

提前谢谢了。干杯!

4

2 回答 2

2

不确定我是否完全理解这个问题,但是:由于您在那里有两个不同的实体管理器和两个不同的数据库(假设您没有同时将相同的数据重复保存到两个数据库,看起来您不是),我认为在你的界面中有两种不同的方法是合理的。(我会以不同的方式命名它们以避免我认为的混淆。)

要合并前两个,如何使用通用接口或继承的抽象基类并将参数类型更改为该通用类型?

于 2010-10-17T01:17:39.667 回答
0

如果您需要在同一方法中合并来自 2 个不同数据库的 2 个实体,则应该配置 JTA - 因为事务将跨越 2 个数据库。

不太确定你想用通用的东西做什么......你是否试图提供一种方法来处理例如 a T extends AbstractEntity,然后在 crud 方法中,

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

???

还是您要进行水平分区?:

多用户数据源 - Spring + Hibernate ,

http://www.jroller.com/kenwdelong/entry/horizo​​ntal_database_partitioning_with_spring

于 2010-10-16T03:54:18.033 回答