我有一个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),它看起来像代码正常工作(没有错误)但数据库没有更新。
我无法理解为什么查询不能从抽象类开始工作,只从数据库获取数据的查询是从抽象类开始的。