Hibernate的一个一对多删除与注释(Hibernate one-to-many deletin

2019-10-16 15:49发布

我有删除一对多和多对一有关休眠的问题。 我想这个问题是我有两个父母一个孩子。 这是我得到了它

Persona        Rol        Pais
 id             id         id
 name           name       name
 Pais
 Rol

正如你所看到的,这个人(角色)是与角色(ROL)和国家(派斯)。 我的实体是这样的:

public class Persona  implements java.io.Serializable {
  @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="Pais", nullable=false)
    public Pais getPais() {
       return this.pais;
    }

@ManyToOne(fetch=FetchType.LAZY)
   @JoinColumn(name="Rol", nullable=false)
   public Rol getRol() {
      return this.rol;
   }

派斯(国家)

public class Pais  implements java.io.Serializable {
   private Set<Persona> personas = new HashSet<Persona>(0);
   @OneToMany(fetch=FetchType.LAZY, mappedBy="pais", cascade=CascadeType.ALL,orphanRemoval=true)
  public Set<Persona> getPersonas() {
    return this.personas;

ROL(角色)

public class Rol  implements java.io.Serializable {
  private Set<Persona> personas = new HashSet<Persona>(0);

  @OneToMany(fetch=FetchType.LAZY, mappedBy="rol", cascade=CascadeType.ALL,orphanRemoval=true)
    public Set<Persona> getPersonas() {
      return this.personas;
    }

我试图删除的人,只有人,所以我认为我必须先拆下国家和角色,然后删除该人,但不起作用。 这是我的删除代码

session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Persona p = (Persona)session.load(Persona.class, idPersona);
Pais pais = (Pais)session.load(Pais.class, p.getPais().getId()); //try to p.getPais();
rol rol = (Rol)session.load(Rol.class,p.getRol().getId()); //try to p.getRol();
pais.getPersonas().remove(p);
rol.getPersonas().remove(p);
p.setPais(null);
p.setRol(null);
session.update(pais);
session.update(rol);
session.delete(p);
session.getTransaction().commit();
session.close();

希望你能帮助我,在休眠这个删除的是吓到我了。

Answer 1:

如果你只是想删除的人。 您可以直接删除它。

session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Persona p = (Persona)session.load(Persona.class, idPersona);
session.delete(p);
session.getTransaction().commit();
session.close();


文章来源: Hibernate one-to-many deleting with annotations