java - 为什么 Hibernate session 对象的 delete 方法不起作用?

标签 java hibernate

为什么 session 对象的 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;
    }

}

最佳答案

正如评论中调查的那样,你正面临着

org.hibernate.TransactionException: nested transactions not supported exception

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

我可以在您的代码中看到其中一个案例。在下面查看您的代码

@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();
}

看,您开始但从未提交过事务。明智地检查项目中的所有其他地方。

关于java - 为什么 Hibernate session 对象的 delete 方法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848997/

相关文章:

java - hibernate中的@Parameter注解

java - 通过实体图加载元素集合时,SqlNode 的文本未引用预期的列数错误

java - 在Hibernate中生成非冲突非主键唯一 "composite ids"

java - 如何在项目中找到不需要的jar

java - 无法使用InputStream读取API读取所有字节?

java - 下载 PDF 文件以供离线查看

java - Hibernate映射一个类到两个表(两个表多对一关系)

java - Spring boot - 更新一个实体后,一对一关系未反射(reflect)在两个表上

Java和C#通过消息队列进行通信

java - cardview点击详细内容时如何发送数据