我正在构建一个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;
}
}