Spring-boot有两个EntityManager和抽象dao层

时间:2018-01-15 16:13:34

标签: java database spring jpa spring-boot


我有一个Spring-boot项目,在我的项目中我为两个不同的DB定义了两个EntityManager。
我的所有实体(表)对于两个不同的DB都是通用的。
唯一不同的是Dao层 - 但由于我的一些数据库查询是共享的,我决定创建一个常见的Dao抽象层。我向扩展抽象类的类添加了一个getEntityManager()函数。
例:

@Repository
@Transactional(value = "secondaryTransactionManager")
@javax.transaction.Transactional
public class TasksSecondaryDao extends TasksDaoAbstract {

 @PersistenceContext(unitName = "secondary")
 private EntityManager entityManager;

 @Override
 public EntityManager getEntityManager() {
  return entityManager;
 }

 public void updateTask(Task task) {
  entityManager.merge(task);
 }

}


@Repository
@Transactional
public class TasksFirstDao extends TasksDaoAbstract {

 @PersistenceContext
 private EntityManager entityManager;

 @Override
 public EntityManager getEntityManager() {
  return entityManager;
 }

 public void updateTask(Task task) { entityManager.merge(task); }

}



public abstract class TasksDaoAbstract { 

 @Transactional(Transactional.TxType.NEVER)
 public List<Task> getAll() {
  return getEntityManager().createQuery("FROM Task", 
  Task.class).getResultList();
  }


  public abstract EntityManager getEntityManager();

 }


通常这个代码是有效的。但是,如果我试图将updateTask方法放在抽象类中(使用@Transactional),它看起来像代码正常工作(没有错误)但数据库没有更新。

我无法理解为什么查询不能从抽象类开始工作,只从数据库获取数据的查询是从抽象类开始的。

0 个答案:

没有答案