Вызов службы с использованием entityManager в классе AuditAwareImpl
Я работаю над созданием весеннего загрузочного приложения. В этом приложении я включил аудит сущностей для их создания_данных, созданных_данных, модифицированных_данных, модифицированных_бэ с использованием @EnableJpaAuditing
Однако стандартный метод возвращает данные типа String из этого метода (обычно это имя пользователя).
Тем не менее, в моем приложении я хочу установить атрибуты Created_by, updated_by различных сущностей для типа "Пользователь" (пользовательский объект пользователя в моем приложении, а не простой тип данных String.
Причина, по которой я хочу, чтобы для create_by и ified_by был задан тип класса User, заключается в том, что, когда я запрашиваю экземпляр сущности, я не хочу запрашивать сущность "Создано" и "изменено", чтобы получить полную информацию о пользователе.
Теперь, когда я попытался это сделать, я столкнулся со следующей проблемой.
Метод getCurrentAuditor() постоянно завершается ошибкой, когда я пытаюсь использовать entityManager для запроса информации о пользователе, возвращенной из информации об имени пользователя, вошедшего в систему, из Spring Security.
Есть ли способ, которым я могу выполнить запрос, чтобы получить возвращенные данные пользователя из метода getCurrentAuditor()?
Я использовал следующий код, и он несколько раз терпит неудачу, что приводит к ошибке stackru.
В приведенном ниже фрагменте кода, если я удаляю запрос к запросу на 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;
}
}