0

ビジネス ロジックを保持する slsb があります。ジェネリックを使用して、次の 3 つのメソッドを 1 つのジェネリック メソッドに変更するにはどうすればよいですか? 最初の 2 つは同じデータベースで、3 番目は別のデータベースです。また、トランザクションに関連してメソッドにさらに注釈が必要ですか?

@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

質問を完全に理解しているかどうかはわかりませんが、そこには2つの異なるエンティティマネージャーと2つの異なるDBがあるため(同じデータを両方のDBに同時に重複して保存していないと仮定すると、そうではないようです) )、インターフェイスに 2 つの異なるメソッドを用意するのは合理的だと思います。(混乱を避けるために、私はそれらを別の名前にすると思います。)

最初の 2 つをマージするには、共通のインターフェイスまたは継承された抽象基本クラスを使用して、パラメーターの型をその共通の型に変更するのはどうですか?

于 2010-10-17T01:17:39.667 に答える
0

同じメソッド内で 2 つの異なるデータベースから 2 つのエンティティをマージする必要がある場合は、トランザクションが 2 つのデータベースにまたがるため、JTA を構成する必要があります。

一般的なことで何をしようとしているのかわからない... crud などのメソッドを提供しようとしていて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 に答える