我在使用休眠删除时遇到问题。我尝试了很多“解决方案”,但都没有奏效。我想在不删除比赛 (campeonato) 的情况下删除球队 (equipo)
所以,我有这个 ER
Equipo --> Equipo_Campeonato <-- Campeonato
id Equipo id
nombre Campeonato nombre
我的实体是:
表装备:
@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();
所以我希望你能帮助我。
更新
这是 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.update(campeonato); 行中。例外是“非法尝试将集合与两个打开的会话相关联”。:S 解决方案由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();
}
}
我认为问题在于在不同的会话中加载“Campeonato”和“Equipo”。希望这可以帮助其他有同样问题的人。