如何在Hibernate中通过两个属性删除实体?

时间:2018-08-04 20:17:49

标签: java hibernate spring-mvc

这些天来我遇到了一个问题,对于其他语言(例如php)来说这很简单,但是我正在做的项目是在Spring MVC中。 问题是:在 Spring MVC 中,我如何删除一个具有来自该实体的两个属性ID的实体

示例:“ 从其中id1 =:id1和id2 =:id2 的实体删除”(这是我想要的查询)

感谢您的关注。

我正在尝试...

public boolean remover(int idUsuario, int idCategoria) {

    EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
    EntityManager manager = factory.createEntityManager();


    String hqlStr = "delete from UsuarioEscolheCategoria where idUsuario = :idUsuario and idCategoria = :idCategoria";

    Query query = null; 


    try {

        query = manager.createQuery(hqlStr);

        query.setParameter("idUsuario", idUsuario);
        query.setParameter("idCategoria", idCategoria);

        query.executeUpdate();

        manager.close();
        factory.close();

        return true;

    }catch(Exception e) {
        return false;
    }

}

如果我例外,它将给我:

Exception error

2 个答案:

答案 0 :(得分:0)

String hqlStr = "delete from UsuarioEscolheCategoria where usuario.idUsuario = :idUsuario and categoria.idCategoria = :idCategoria";

重要的部分是usuario.idUsuariocategoria.idCategoria。这样,您就可以引用模型类上的属性类型Usuario

答案 1 :(得分:0)

您的问题是会话工厂,请检查如何创建它,这里是一个简单的有用示例:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;


    @Autowired
    private SessionFactory sessionFactory;

    protected Session getSession() {
    return sessionFactory.getCurrentSession();
    }

    public void deleteById(Integer id) {
        Query query = getSession().createSQLQuery("delete from TABLE where id = :t_id");
        query.setInteger("t_id", id);
        query.executeUpdate();
    }