Java 当存在多个同一关系时,如何删除子记录?

Java 当存在多个同一关系时,如何删除子记录?,java,hibernate,netbeans-7,many-to-one,cascading-deletes,Java,Hibernate,Netbeans 7,Many To One,Cascading Deletes,表grpUsuario @Id @Basic(optional = false) @NotNull @Column(name = "grupo") private Integer grupo; @Basic(optional = false) @NotNull @Size(min = 1, max = 64) @Column(name = "descr

表grpUsuario

        @Id
        @Basic(optional = false)
        @NotNull
        @Column(name = "grupo")
        private Integer grupo;

        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 64)
        @Column(name = "descripcion")
        private String descripcion;

        @OneToMany(cascade = CascadeType.ALL, mappedBy = "secLevel")
        private Collection<Menu> menuCollection;

        @OneToMany(cascade = CascadeType.ALL, mappedBy = "grupo", orphanRemoval = true)
        private Collection<Usuario> usuarioCollection;ç
要删除的函数

 public boolean delete(Usuario usuario){
        Session session = HibernateUtil.openSession();  
        Transaction tx = null;        
        try {
            tx = session.getTransaction();
            tx.begin();
            session.delete(usuario);
            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
        }        
        return true;
    }

这是我拥有的代码,但我没有删除记录。这段代码与我尝试删除具有关系的表的代码相同,如果它起作用,我应该做更多的工作来删除子记录吗?

您可以使用SQL更新注册表并在以后进行删除。

如注释中所述:实体需要位于持久性上下文中,Hibernate才能正确删除它。因此,解决方案是首先使用Hibernate获取它

替换

session.delete(usuario);


小心:
get()
如果实体不再在数据库中,则可能返回
null
值,因此在将对象传递到
delete

之前,您最好先检查该值,然后再尝试删除此实例,是否会收到警告或异常?我没有尝试过,但通常在删除实体之前需要加载它。显示no exepcion,相反的结果do为true,并显示消息记录已成功删除。但是记录是存在的。当你用一个
session.delete(session.get(Usuario.class,Usuario.getIdUsuario())
,假设
cod
是你的主键时,会发生什么?谢谢,是的,主键是
cod
会话。delete(Usuario)
by
session.delete(session.get(Usuario.class,Usuario.getIdUsuario())
然后它就会运行
 public boolean delete(Usuario usuario){
        Session session = HibernateUtil.openSession();  
        Transaction tx = null;        
        try {
            tx = session.getTransaction();
            tx.begin();
            session.delete(usuario);
            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
        } finally {
            session.close();
        }        
        return true;
    }
session.delete(usuario);
session.delete(session.get(Usuario.class, usuario.getIdUsuario()));