使用AuditAwareImpl类中的entityManager调用服务

时间:2019-02-26 13:11:16

标签: spring-boot jpa-annotations

我正在构建一个Spring Boot应用程序。在此应用程序上,我已使用@EnableJpaAuditing

启用了实体的creating_date,created_by,modified_date,modified_by审核。

但是,标准方法从该方法返回String类型的数据(通常是用户名)。

但是,在我的应用程序中,我想将各个实体的Created_by,modified_by属性设置为“用户”类型(应用程序中的自定义用户实体,而不是简单的String数据类型。

之所以要将created_by和Modifyed_by设置为User类类型,是因为当我查询实体实例时,我不想重新查询实体“ Created by”和“ modified by”以了解完整信息。用户详细信息。

现在,当我尝试执行此操作时,我面临以下问题。

当我尝试使用entityManager从Spring Security中查询从登录的用户名信息返回的用户信息时,getCurrentAuditor()方法连续失败。

是否可以执行查询以从getCurrentAuditor()方法中获取返回的用户名的用户详细信息?

我使用了以下代码,但它反复失败,导致堆栈溢出错误。

在下面的代码片段中,如果我删除了对EntityManager的查询的调用,则一切正常。我没有在方法响应中使用查询结果中的任何内容。仅添加查询本身会失败。

public class AuditorAwareImpl implements AuditorAware<String> {

    public static final Logger logger = LoggerFactory.getLogger(AuditorAwareImpl.class);

    @Autowired
    EntityManager entityManager;

    @Override
    public String getCurrentAuditor() {

        logger.info("Inside getCurrentAuditor() API");

        String user = "superadmin";

        String userInfoQuery = "select u.id, u.username, u.password, u.superuser, u.fullname, u.email, u.active from User u " +
                               "where upper(u.username) = upper('" + user + "')";

        Query query = entityManager.createNativeQuery(userInfoQuery.toString());

        List<Object[]> objResponse = new ArrayList<>();

        objResponse = query.getResultList();

        logger.info("In getCurrentAuditor() :: Query response :: size :: " + objResponse.size());

        return user;

    }
}

0 个答案:

没有答案