Hibernate 使用注释休眠多到任意删除

Hibernate 使用注释休眠多到任意删除,hibernate,annotations,many-to-many,Hibernate,Annotations,Many To Many,我在删除hibernate时遇到问题。我尝试了很多解决方案,但都不奏效。我想删除一个球队装备,但不删除锦标赛营地 所以,我有这个呃 Equipo --> Equipo_Campeonato <-- Campeonato id Equipo id nombre Campeonato nombre 所以我希望你能帮助我 更新 这是danny.lesnik告诉我的集成

我在删除hibernate时遇到问题。我尝试了很多解决方案,但都不奏效。我想删除一个球队装备,但不删除锦标赛营地

所以,我有这个呃

Equipo   -->    Equipo_Campeonato  <--  Campeonato
 id               Equipo                 id
 nombre           Campeonato             nombre
所以我希望你能帮助我

更新

这是danny.lesnik告诉我的集成到我的代码中的代码

Campeonato campeonato = ControladorCampeonato.obtenCampeonato(idCampeonato);
//this is where I get the tournament
    if(listaEquiposSeleccionados.length>0){
        for(int i=0;i<listaEquiposSeleccionados.length;i++){
            int idEquipo = listaEquiposSeleccionados[i].getId().intValue();
            Equipo equipo= ControladorEquipo.obtenEquipo(idEquipo);            
            this is where I get the team.
            try{
                Session session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();
                campeonato.getEquipos().remove(equipo);
                session.update(campeonato);
                session.getTransaction().commit();
                listaEquiposAgregados.add(equipo);
            }
我正在做一个网页,我可以选择一个比赛,我可以选择多个球队。我正在调试,异常就在session.updatecampeonato行中;尝试将集合与两个打开的会话关联是非法的。异常:s 解决方法


我认为问题在于在不同的时段装载Campeonato和Equipo。希望这能帮助其他有同样问题的人。

如果我理解正确,你只想从一场特殊比赛中删除一支特殊球队。在您的情况下,删除它之间的连接就足够了

   String equepoId = "xxx"; // 
    String campeonatoId = "yyy";
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    Campeonato campeonato = (Campeonato)session.load(Campeonato.class,campeonatoId);
    Equipo equipo = (Equipo)session.load(Equipo.Class,equapoId);
    campeonato.getEquipos().remove(equipo);
    session.update(campeonato);
    session.getTransaction().commit();

你想做什么?问题是什么?很抱歉,我想删除一个球队装备而不删除锦标赛营地谢谢你的回答。所以我认为这可能有效,但我有一个问题。我必须凭身份证参加比赛,球队也必须凭身份证。所以hibernate抛出了一个异常,我无法对两个打开的会话进行操作。当我尝试将团队添加到tournamnet时,我遇到了这个问题,但我使用session.merge解决了这个问题。我会用不同的答案发布代码,这样你就可以看到它,也许可以帮我谢谢!嘿,谢谢!成功了!!!我在不同的会话中加载了Campeonato和Equipo,所以这可能就是问题所在。谢谢你不知道我有多谢你!好的,我接受答案。谢谢!如果没有问题,希望你能帮我解决另一个问题。现在我删除了一部电影,但是这个孩子有两个父母。如果你能帮我。如果你无论如何都不能感谢你对这个问题的帮助;
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
equipo.getCampeonatos().remove(campeonato);
campeonato.getEquipos().remove(equipo);
session.delete(equipo); // or session.merge(equipo); or session.saveOrUpdate(equipo);
session.getTransaction().commit();
Campeonato campeonato = ControladorCampeonato.obtenCampeonato(idCampeonato);
//this is where I get the tournament
    if(listaEquiposSeleccionados.length>0){
        for(int i=0;i<listaEquiposSeleccionados.length;i++){
            int idEquipo = listaEquiposSeleccionados[i].getId().intValue();
            Equipo equipo= ControladorEquipo.obtenEquipo(idEquipo);            
            this is where I get the team.
            try{
                Session session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();
                campeonato.getEquipos().remove(equipo);
                session.update(campeonato);
                session.getTransaction().commit();
                listaEquiposAgregados.add(equipo);
            }
if(listaEquiposSeleccionados.length>0){            
        for(int i=0;i<listaEquiposSeleccionados.length;i++){
            int idEquipo = listaEquiposSeleccionados[i].getId().intValue();
                Session session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();
                Equipo equipo= (Equipo)session.load(Equipo.class, idEquipo);
                Campeonato campeonato = (Campeonato)session.load(Campeonato.class, idCampeonato);
                campeonato.getEquipos().remove(equipo);
                session.update(campeonato);
                session.getTransaction().commit(); 
                session.close();
        }
}
   String equepoId = "xxx"; // 
    String campeonatoId = "yyy";
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    Campeonato campeonato = (Campeonato)session.load(Campeonato.class,campeonatoId);
    Equipo equipo = (Equipo)session.load(Equipo.Class,equapoId);
    campeonato.getEquipos().remove(equipo);
    session.update(campeonato);
    session.getTransaction().commit();