gpt4 book ai didi

java - 如果使用 spring AuthenticationProcessingFilter 扩展类,则无法在 jpa 中保留实体

转载 作者:行者123 更新时间:2023-12-01 05:22:19 24 4
gpt4 key购买 nike

我有这样的类层次结构

public class AccessHistoryJpaDAO extends PaginatedJpaDAO<AccessHistory, Long>
implements AccessHistoryDAO

在AccessHistoryJpaDAO中,我实现了在AccessHistoryDAO接口(interface)中声明的logIn方法。

public void logIn(AccessHistory entity) throws DAOException
{
super.save(entity);
}

然后我扩展了spring的AuthenticationProcessingFilter

公共(public)类 CustomAuthenticatingFilter 扩展 AuthenticationProcessingFilter

和重写的方法

@Override
public Authentication attemptAuthentication(HttpServletRequest request)
throws AuthenticationException

当我调用这个方法时

getAccessHistoryDAO().logIn(entity);

hibernate 无法持久化实体,但是当我直接打电话时

getAccessHistoryDAO().save(entity)

上述方法是持久实体,我试图弄清楚但没有线索,任何帮助将不胜感激。谢谢。

最佳答案

这看起来像是 Proxy-AOP 的一个众所周知的问题。

我猜您在 save 方法中有一个 @Transactional 注释。但是只有当该方法是从其他 spring bean 调用时才会考虑此注释。如果从同一个 spring bean (this.save()) 调用它,则不会调用 AOP 代理,因此不会启动事务。

您可以通过至少三种不同的方式处理该问题:

  • logIn 方法中添加一个额外的 @Transactional 注释,或者
  • 使用显式事务管理而不是声明式事务管理,
  • 使用真正的 AspectJ 而不是 Spring Proxy-AOP(这就是我所做的)

关于java - 如果使用 spring AuthenticationProcessingFilter 扩展类,则无法在 jpa 中保留实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10188657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com