2012-05-02 12 views
1

休止状態で削除する際に問題があります。私は多くの "解決策"を試しましたが、彼らは働いていません。私はトーナメントを削除せずチーム(EQUIPO)(カンピオナート)注釈で多対多の削除を休止

を削除したい、私はこのERを持って

Equipo --> Equipo_Campeonato <-- Campeonato 
id    Equipo     id 
nombre   Campeonato    nombre 

私のエンティティは次のとおりです。

表EQUIPO:

@Entity 
@Table(name="equipo" 
    ,catalog="sistemafutbol" 
) 
public class Equipo implements java.io.Serializable { 


private Integer id; 
private String nombre; 
private Set<Campeonato> campeonatos = new HashSet<Campeonato>(0); 

@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@JoinTable(name="equipoxcampeonaato", catalog="sistemafutbol", joinColumns = { 
    @JoinColumn(name="Equipo", nullable=false, updatable=false) }, inverseJoinColumns =  { 
    @JoinColumn(name="Campeonato", nullable=false, updatable=false) }) 
public Set<Campeonato> getCampeonatos() {... 

Tabla Campeonato

Entity 
@Table(name="campeonato" 
    ,catalog="sistemafutbol" 
) 
public class Campeonato implements java.io.Serializable { 


    private Integer id; 
    private String nombre; 
    private Set<Equipo> equipos = new HashSet<Equipo>(0); 

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
    @JoinTable(name="equipoxcampeonaato", catalog="sistemafutbol", joinColumns = { 
    @JoinColumn(name="Campeonato", nullable=false, updatable=false) }, inverseJoinColumns = { 
    @JoinColumn(name="Equipo", nullable=false, updatable=false) }) 
    public Set<Equipo> getEquipos() {... 

そして、私はそれをやろうとしてきたとのコードは次のとおりです。

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

だから私はあなたが私を助けることができると思います。

UPDATE

これは私のコードへの統合を教え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); 
      } 

私はトーナメントを選択して複数のチームを選択できるWebページを作成しています。私はデバッグしていましたが、例外はsession.update(campeonato)の行にあります。例外は「コレクションを2つのオープンセッションに関連付ける不正な試み」でした。 :danny-lesnik

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

によってS ソリューションは、私はこの問題は貴様のセッションで「カンピオナート」と「EQUIPO」をロードしたと思います。これが同じ問題を抱えている他の人々に役立つことを願っています

+0

何をしようとしていますか、問題は何ですか? –

+0

申し訳ありませんが、私はトーナメント(campeonato)を削除せずにチーム(equipo)を削除したいです –

答えて

0

私が正しく理解しているのであれば、特別なトーナメントから1名の特別チームを削除したいだけです。あなたのケースでは、それの間の接続を削除するだけで十分です。

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

答えに感謝します。だから、私はマイグレーションの仕事だと思っていますが、私はそれに問題があります。私はIDとチームによってトーナメントをもらう必要があります。だから私は2つの開いたセッションで操作を行うことができないという例外をスローします。私はtournamnetにチームを追加しようとすると、私はその問題がありますが、私はそれをsession.merge()で修正します。別の答えでコードを投稿するつもりです。あなたはそれを見て、助けてくれてありがとう! –

+0

私は自分の答えを編集する必要があります。あなたが私を助けてくれることを願います。ありがとう –

+0

私は私の答えを編集してください更新を参照してください。 –

関連する問題