代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

如何使用JPA/hibernate EntityManager和EJB3.0实现泛型?

  •  0
  • NimChimpsky  · 技术社区  · 14 年前

    我有一个保存业务逻辑的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);
    }
    

    干杯!

    2 回复  |  直到 14 年前
        1
  •  2
  •   Manius    14 年前

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

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

        2
  •  0
  •   Community prosti    7 年前

    不太确定你想用普通的东西做什么。。。你想提供一种方法来解决积垢吗 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