Каков наилучший способ убедиться, что транзакционный метод не распространяется на транзакционный метод только для чтенияJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Каков наилучший способ убедиться, что транзакционный метод не распространяется на транзакционный метод только для чтения

Сообщение Anonymous »


В настоящее время я столкнулся с проблемой с двумя методами одного и того же сервиса Spring. Вот простой пример:

@Transactional(readOnly = true) public Необязательный readSomeEntity (строка idEntity) { верните this.someEntityRepository.findById(idEntity); } @Транзакционный public Необязательный readOrCreateSomeEntity (объект SomeEntity) { если (this.someEntityRepository.existsById(entityInfo.getId()) { // Как сделать так, чтобы этот вызов проходил через Spring Proxy и собственно // применяется @Transactional(readOnly = true)? вернуть this.readSomeEntity(entityId.getId()); } еще { return Необязательный.of(this.someEntityRepository.save(entity)); } } Как на самом деле убедиться, что в контексте @Transactional (не только для чтения) readOrCreateSomeEntity фактический вызов readSomeEntity чисто завернутый в транзакционный контекст только для чтения? И что транзакционный контекст readOrCreateSomeEntity не распространяется?

Я подумал о двух вариантах:
[*]Используйте ссылку на самого себя @Autowired MyService self. Но это проблема, поскольку она приводит к циклической ссылке и ошибке создания контекста. [*]Я также думал о @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW), но он даже не обрабатывается Spring, поскольку я не вызываю readSomeEntity< /code> через прокси!
Можно ли этого добиться, и если да, то возможно ли это только путем обращения к самому себе?

С чисто технической точки зрения я бы предпочел, чтобы readSomeEntity действительно был на 100% доступен только для чтения, потому что, эй, это метод только для чтения, и я не понимаю, почему Spring распространяет его не только для чтения. транзакционный контекст для подметода чтения. Я ошибаюсь, думая так?

В конце концов, должно ли меня это волновать? Не слишком ли сложно требовать, чтобы этот метод чтения на самом деле не выполнял обновления на 100 %, желая иметь транзакционный контекст только для чтения?

Спасибо за понимание.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Каков наилучший способ создания массива только для чтения на С#?
    Гость » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Гость
  • Каков наилучший способ сделать List доступным только для чтения?
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Каков наилучший способ динамического добавления метки aria с помощью JavaScript?
    Гость » » в форуме Javascript
    0 Ответы
    87 Просмотры
    Последнее сообщение Гость
  • Каков наилучший способ динамического добавления метки aria с помощью JavaScript?
    Гость » » в форуме Javascript
    0 Ответы
    73 Просмотры
    Последнее сообщение Гость
  • Каков наилучший способ динамического добавления метки aria с помощью JavaScript?
    Гость » » в форуме Javascript
    0 Ответы
    57 Просмотры
    Последнее сообщение Гость

Вернуться в «JAVA»