休止状態で削除する際に問題があります。私は多くの "解決策"を試しましたが、彼らは働いていません。私はトーナメントを削除せずチーム(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」をロードしたと思います。これが同じ問題を抱えている他の人々に役立つことを願っています
何をしようとしていますか、問題は何ですか? –
申し訳ありませんが、私はトーナメント(campeonato)を削除せずにチーム(equipo)を削除したいです –