Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPA/hibernate EntityManager和EJB3.0实现泛型?_Java_Generics_Jpa_Ejb 3.0_Entitymanager - Fatal编程技术网

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

Java 如何使用JPA/hibernate EntityManager和EJB3.0实现泛型?,java,generics,jpa,ejb-3.0,entitymanager,Java,Generics,Jpa,Ejb 3.0,Entitymanager,我有一个slsb保存我的业务逻辑,如何使用泛型将以下三个方法更改为一个泛型方法?前两个是相同的数据库,第三个是不同的数据库。这些方法是否还需要与事务相关的进一步注释 @PersistenceContext(unitName = "db") private EntityManager myEntityManager; @PersistenceContext(unitName = "db2") private EntityManager myDB2EntityManager; @Transact

我有一个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);
}
非常感谢。
干杯

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

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

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

或者您正在尝试进行水平分区吗?:

,


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


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

我认为无状态注释消除了对ejb3.0中每个方法的事务属性注释的需要?是的,在ejb3中,所有EJB方法默认都是事务性的(必需的)。因此,在任何EJB方法上都不需要@TransactionaAttribute,除非您需要不同于该方法默认值的tx属性(例如Requiures_NEW)