Метод обновления сеанса гибернации не работает - PullRequest
0 голосов
/ 25 сентября 2019

Я использую Spring Bot 2.1.8. Release с Hibernate5.Моя проблема в том, что метод обновления сессии Hibernate не работает для меня.Я получаю запись из базы данных, используя метод get сессии hibernate и присваиваю ее некоторой переменной своего типа.затем у меня пауза в 30 секунд. Тем временем я изменяю эту запись с уровня базы данных, и после этой паузы я вызываю метод обновления сеанса гибернации.Но этот сеанс не извлекает измененную запись, вместо этого он возвращает предыдущую запись, полученную мной с использованием метода get сеанса гибернации.

Ниже приведен мой рабочий код:

package com.example.service;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.example.CompositeKey.Employee;
import com.example.CompositeKey.EmployeeIdentity;

@Service
public class CompositeKeyTester {

    @PersistenceContext
    private EntityManager entityManager;

    private Session getHibernateSession() {
        Session session = entityManager.unwrap(Session.class);
        return session;
    }

    @Transactional
    public void saveObjects() {
        Session session = getHibernateSession();
        Employee employee = session.get(Employee.class, 1);
        System.out.println(employee); // return name="Rajan"
                Thread.sleep(30000); // meanwhile i'm changing employee record in database, lets say name = "something"
        session.refresh(employee); // I can see the database select quert executed via hinerbate logs.
        System.out.println(employee); // but still getting "Rajan", It should be "something"
    }

}

IРешил эту проблему, используя два разных сеанса гибернации, и перед вызовом метода refresh я объединяю объект, возвращенный методом get, во второй сеанс.Ниже мой код:

Session session1 = getHibernateSession();
Session session2 = getHibernateSession();

Employee employee = session1.get(Employee.class, 1);
System.out.println(employee); // return name="Rajan"
Thread.sleep(30000); // meanwhile i'm changing employee record in 
                        database, lets say name = "something"
Employee merged = (Employee) session2.merge(employee);
session2.refresh(merged);
System.out.println(merged); // return name="something"

Но я хочу сказать, как я могу добиться этого с помощью одного сеанса гибернации?

...