Open Session In View не требует, чтобы весь запрос происходил в одной транзакции, это только означает, что Hibernate Session привязан к потоку, обслуживающему запрос, и повторно используется каждый раз, когда что-либо запрашивает сеанс в этом запросе. , Помните, что Session - это как необычная карта, которая поддерживает идентичность всех объектов, отображаемых в своей области, фактические объекты могут быть получены в одной транзакции или в нескольких транзакциях.
Шаблон сеанса на транзакцию на самом деле является альтернативой OSIV. Этот шаблон встречается не часто.
В отношении того, что ваш метод только для чтения вызывает метод чтения-записи, я бы сказал, что вам следует заново подумать, почему вы хотите использовать этот метод только для чтения, когда на самом деле он может записывать данные. Я бы сказал, что либо вы выделяете часть, предназначенную только для чтения, и вызываете метод read-write, вызывающий метод только для чтения, либо просто прекращаете считать его доступным только для чтения (это не так).
То, что транзакция переведена в режим только для чтения для одной транзакции, не означает, что она останется в режиме только для чтения для остальной части области действия сеанса (OSIV). Фактически, последующие транзакции в рамках открытого сеанса могут даже не происходить в том же соединении.