1

HibernateでOneToManyとManyToOneを削除する際に問題が発生しました。問題は、一人っ子に2人の親がいることだと思います。これが私がそれを手に入れた方法です

Persona        Rol        Pais
 id             id         id
 name           name       name
 Pais
 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;

ロール(役割)

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

あなたが私を助けてくれることを願っています、休止状態のこの削除物は私をびっくりさせています。

4

1 に答える 1

3

個人を削除したいだけの場合。削除するだけです。

session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Persona p = (Persona)session.load(Persona.class, idPersona);
session.delete(p);
session.getTransaction().commit();
session.close();
于 2012-05-03T20:19:52.697 に答える