2012-05-03 10 views
1

休止状態でOneToManyとManyToOneを削除する際に問題があります。私は問題は、私は1人の子供のために2人の両親がいることだと思う。これは、私はそれが注釈を使用してHibernate 1対多削除

Persona  Rol  Pais 
id    id   id 
name   name  name 
Pais 
Rol 

役割(ROL)と国(PAIS)に関連しているあなたは、人(ペルソナ)を見ることができるようになった方法です。 私のエンティティは、このようなものです:私は人を削除しようとしている

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; 
    } 

とその人だけが国と役割を切り離してからpを削除しなければならないと思いますそれはうまくいきません。これは私の削除のためのコードです

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

あなたが私を助けてくれることを願っています。休止状態でこの削除することは私を驚かせています。

+0

だから問題は何ですか? –

+0

人は削除されていません:( –

答えて

3

Personを削除したいだけなら、あなたはただそれを削除することができます。

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

それは他の関係には関係ありません??親は私が意味するか? –

+0

いいえ、それについて考えてみましょう:あなたの外来キーはすべてPersonテーブルにあります。 –

+0

そのような問題は、関係やそれ以外のものではありませんでした。問題は、Webページのようなもので、私はそれが見えるjava-primefacesを使用しています。コマンドボタンのように、Bean上のメソッドを呼び出すことはできません。私は2つのコマンドボタンを持っていて、1つはうまく動作します(人を追加する人)、人を削除する人はメソッドを呼び出しません。 pd:私はap:dataTableも持っていて、それが問題だと思われます。コードのおかげで、それが助けになりました。 –

関連する問題