Java 无法可靠地处理';坚持';打电话,为什么会这样?

Java 无法可靠地处理';坚持';打电话,为什么会这样?,java,spring,exception,jpa,transactions,Java,Spring,Exception,Jpa,Transactions,我正在开发一个部署在Tomcat上的示例Spring应用程序 Dao类: @Repository public class UserDao implements IUserDao { @PersistenceContext private EntityManager manager; @Override public User getUserById(Integer id) { User u = manager.find(User.class,

我正在开发一个部署在Tomcat上的示例Spring应用程序

Dao类:

@Repository
public class UserDao implements IUserDao
{
    @PersistenceContext
    private EntityManager manager;

    @Override
    public User getUserById(Integer id)
    {
     User u = manager.find(User.class, id);

     return u;
    }

    @Override
    public User getUserByName(String name)
    {
        Query q = manager.createQuery("SELECT u FROM User u WHERE u.name = ?");
        q.setParameter(1, name);

        @SuppressWarnings("unchecked")
        List<User> list = (List<User>) q.getResultList();

        if(!list.isEmpty())
         return list.get(0);

        return null;
    }

    @Override
    public void addUser(User u)
    {
        manager.persist(u);

    }
}
在请求/page时,我不断收到以下异常:

No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call.
我的问题是为什么会发生这种情况?

如果我调用另一个Dao方法,而该方法不涉及实体管理器上持久化方法的调用,那么为什么不会发生同样的情况呢?

1。因为当前线程没有可用的事务,2。因为Spring允许在没有事务的情况下执行select查询(尽管我也会避免)。就我所知,查询的执行是由SQL DBMS作为正常事务管理的,所以为什么要费心明确地创建一个查询,我错了吗?谢谢你的时间我不明白你在问什么:dbms是否像普通查询一样管理查询?这是什么意思?无论如何,这是不相关的,因为该异常不是由DBMS引发的,而是由Spring引发的。我遇到了同样的问题。在我删除了“init()”方法之后,它对我来说工作得很好。此init()方法已声明为“默认init方法”。1。因为当前线程没有可用的事务,2。因为Spring允许在没有事务的情况下执行select查询(尽管我也会避免)。就我所知,查询的执行是由SQL DBMS作为正常事务管理的,所以为什么要费心明确地创建一个查询,我错了吗?谢谢你的时间我不明白你在问什么:dbms是否像普通查询一样管理查询?这是什么意思?无论如何,这是不相关的,因为该异常不是由DBMS引发的,而是由Spring引发的。我遇到了同样的问题。在我删除了“init()”方法之后,它对我来说工作得很好。此init()方法已声明为“默认init方法”。
No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call.