Вызов службы с использованием 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;

    }
}

0 ответов

Другие вопросы по тегам