为什么 Hibernate 会话对象的删除方法不起作用?

Pra*_*wat 5 java hibernate

为什么会话对象的 delete 方法在 中不起作用GenericDAOImpl.java,既不给出任何异常也不显示任何输出。所有其他方法都可以正常工作public void delete(T object),请帮助我,对不起,如果我以错误的方式问这个问题。

public class GenericDAOImpl<T> implements IGenericDAO<T> {
private SessionFactory sessionFactory;

public GenericDAOImpl(Class<T> cl, SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
    if (sessionFactory == null)
        throw new RuntimeException("Session factory is null!!!");
}

@Override
public T get(Class<T> cl, Long id) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    @SuppressWarnings("unchecked")
    T element = (T) session.get(cl, id);
    session.getTransaction().commit();
    return element;
}

@Override
public T get(Class<T> cl, Serializable obj) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();     
    @SuppressWarnings("unchecked")   
    T element = (T) session.get(cl, obj);
    session.getTransaction().commit();
    return element;
}

@Override
public T save(T object) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    session.save(object);
    session.getTransaction().commit();
    return object;
}

@Override
public void update(T object) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    session.update(object);
    session.getTransaction().commit();
}

@Override
public void delete(T object) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    session.delete(object);
    session.getTransaction().commit();
}

@SuppressWarnings("unchecked")
@Override   
public T findUniqueByQuery(String hsql, Map<String, Object> params) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery(hsql);
    if (params != null) {
        for (String i : params.keySet()) {
            query.setParameter(i, params.get(i));
        }
    }
    return (T) query.uniqueResult();
}

@SuppressWarnings("unchecked")
@Override
public List<T> query(String hsql, Map<String, Object> params) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery(hsql);
    if (params != null) {
        for (String i : params.keySet()) {
            query.setParameter(i, params.get(i));
        }
    }

    List<T> result = null;
    if ((hsql.toUpperCase().indexOf("DELETE") == -1)
            && (hsql.toUpperCase().indexOf("UPDATE") == -1)
            && (hsql.toUpperCase().indexOf("INSERT") == -1)) {
        result = query.list();
    } else {
    }
    session.getTransaction().commit();

    return result;
    }

}
Run Code Online (Sandbox Code Playgroud)

Sur*_*tta 2

根据评论中的调查,您面临着

org.hibernate.TransactionException:不支持嵌套事务异常

发生这种情况是因为您开始事务并且从未在异常时提交或回滚。

我可以在你的代码中看到其中一种情况。请参阅下面的代码

@SuppressWarnings(“未选中”)

@Override   
public T findUniqueByQuery(String hsql, Map<String, Object> params) {
    Session session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery(hsql);
    if (params != null) {
        for (String i : params.keySet()) {
            query.setParameter(i, params.get(i));
        }
    }
    return (T) query.uniqueResult();
}
Run Code Online (Sandbox Code Playgroud)

看,您已经开始但从未提交过交易。同样检查项目中的所有其他位置。