2012-05-03 3 views
1

У меня проблема с удалением OneToMany и ManyToOne в спящем режиме. Я думаю, проблема в том, что у меня есть два родителя для одного ребенка. Это, как я получил этоHibernate удаление один-ко-многим с аннотациями

Persona  Rol  Pais 
id    id   id 
name   name  name 
Pais 
Rol 

Как вы можете видеть, человек (личность) связано с ролью (РОЛ) и страны (Pais). Мои объекты, как это:

Person

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

Если вы просто хотите удалить Личность. Вы можете просто удалить его.

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

, так что это работает ... проблема заключалась не в том, что отношения или что-то в этом роде. Проблема в том, что, подобно веб-странице, и я использую java-primefaces, кажется как commandbutton не вызывает метод в bean-компоненте. У меня есть две кнопки команд, и только один работает отлично (тот, кто добавляет человека), тот, кто удаляет человека, просто не вызывает метод. любая идея для этого, это будет очень полезно. pd. У меня есть ap: dataTable тоже, и это проблема. Спасибо за код, который мне помог. –

Смежные вопросы