Java 当存在多个同一关系时,如何删除子记录?
表grpUsuarioJava 当存在多个同一关系时,如何删除子记录?,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
@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)
bysession.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()));