Вызов службы с использованием entityManager в классе AuditAwareImpl - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над созданием весенней загрузки приложения.В этом приложении я включил аудит сущностей для их создания_данных, созданных_данных, измененных_данных, модифицированных_байт с помощью @ EnableJpaAuditing

Однако стандартный метод возвращает данные типа String из этого метода (обычно это имя пользователя).

Тем не менее, в моем приложении я хочу установить атрибуты Created_by ,ified__bject_ различных объектов для типа "Пользователь" (пользовательский объект пользователя в моем приложении, а не простой тип данных String.

Причина, по которой я хочу, чтобы для create_by иified_by был задан тип класса User, заключается в том, что когда я запрашиваю экземпляр сущности, я не хочу запрашивать сущность «Создано» и «изменено» для получения полной информации о пользователе..

Теперь, когда я попытался это сделать, я столкнулся со следующей проблемой.

Метод getCurrentAuditor () постоянно завершается ошибкой, когда я пытаюсь использовать entityManager для запроса информации о пользователе, возвращенной изинформация о зарегистрированном имени пользователя в Spring Security.

Есть ли способ, которым я могу выполнить запрос для извлечения сведений о пользователе из возвращенного имени пользователя из метода 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;

    }
}
...