Hibernate Session成功更新对象,但偶尔不会



i与Hibernate Sessions在多线程模式下使用PostgreSQL。init:

<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.current_session_context_class">thread</property> 

(其他字符串是连接URL和实体XML描述))

Hibernateutil:

public class HibernateUtil {
    private static SessionFactory sessionFactory;
    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public static Session getSession() {
        return sessionFactory.getCurrentSession();
    }
    public static void close() {
        sessionFactory.close();
    }
    public static void setSessionFactory(SessionFactory factory) {
        sessionFactory = factory;
    }
}

我在我在单独的类中执行的实体的所有CRUD动作,其中每个动作都在一次交易中执行。

public class SessionService {
    public static <T> T get(Class<T> classvar, int id) {
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        T result = session.get(classvar, id);
        session.getTransaction().commit();
        return result;
    }
    // Some other code
    public static void update(Object obj) {
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        session.update(obj);
        session.getTransaction().commit();
    }
}

多线程工作没有问题(或者我看不到)。但是,一段时间以前,我看到了奇怪的虫子。我从sessionservice.get(Entity.Class,1)中获得了DB的一张记录。更改该实体的一个字段,并通过sessionservice.update(实体)保存它。更新是成功完成的,没有例外(已批准的记录)。但是在数据库中看不到的变化。在运行时实体具有此更改,但在DB中没有。我等待一段时间(潮红和其他),但没有任何改变。试图重复错误 - 所有的错误,找不到错误。有一天,我在生产服务器上捕获了该错误,其中有19个对象,但在其他日子里,我没有看到此错误。最后的时刻:我看不到t catched this bug with other entities (or i don t)。

可能是什么原因?更好地使用实体管理器而不是会议?

您可以发布整个Hibernate.cfg.xml文件(当然要删除用户名和密码)。另外,您是否100%确定您不会遇到错误(Wild Guess)这样的错误:会话已经关联的具有相同标识符值的其他对象?

运行冬眠时存在错误,在运行查询时,该文学在控制台中闪烁了半秒。有一段时间有这个问题。

最新更新