Problemas ao fazer uma remoção, utilizando o Toplink!

Olá galera!

Em uma aplicação com 6 entidades, estou com problemas ao excluir.

Quando excluo um time, ele é excluído sem problemas, mas acaba excluindo também o usuário(s) que têm a referência para o time.

Para não ficar difícil o entendimento, só vou deixar o método para excluir o time.
Tal método também está excluindo o Usuário que tem a id do time que está sendo passado por parâmetro no método excluirTime().

Alguém aí sabe o que posso fazer?

Estou utilizando JPA

public void excluirTime(int idTime) {

		System.out.println("\n**********EXCLUSÃO DE TIME**********\n");

		daoTime.begin();
		Time t = daoTime.find(idTime);
		Autor a = new Autor();

		if (t == null)
			System.out.println("Time inexistente: " + idTime);

		else {
			a.setTime(null);
			t = daoTime.merge(t);
			daoTime.remove(t);
			System.out.println("Time excluído com sucesso!");
		}
		daoTime.commit();

	}

Um time tem um usuário? Se sim, a resposta pro seu problema pode estar no Cascade, na hora que você escreve a relação entre os dois (tem um Cascade Delete ou Cascade All?).

posta as suas entidades Time e Usuario para vermos o mapeamento que você fez. Fica mais fácil. Está utilizando annotations? Caso contrário, poste o xml.

Abraço.

Schwingel

Não Andre, o usuário é que pode ter um time

Vou postar o mapeamento.

[quote=Schwingel]posta as suas entidades Time e Usuario para vermos o mapeamento que você fez. Fica mais fácil. Está utilizando annotations? Caso contrário, poste o xml.

Abraço.

Schwingel[/quote]

segue o mapeamento Schwingel

o fato de ter Usuário, é que tem 2 tipos. O Autor e o Administrador

obrigado!

Classe Usuario

package Model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Usuario {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private String name;
	private String userName;
	private String senha;
	private String email;

	public int getId() {

		return id;

	}

	public void setId(int id) {

		this.id = id;

	}

	public String getName() {

		return name;

	}

	public void setName(String name) {

		this.name = name;

	}

	public String getUserName() {

		return userName;

	}

	public void setUserName(String userName) {

		this.userName = userName;

	}

	public String getSenha() {

		return senha;

	}

	public void setSenha(String senha) {

		this.senha = senha;

	}

	public String getEmail() {

		return email;

	}

	public void setEmail(String email) {

		this.email = email;

	}

	public String toString() {

		return "Usuário: " + userName + " - " + "Nome: " + name;

	}

}

classe Autor

package Model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
@DiscriminatorValue("AUTOR")
public class Autor extends Usuario {

	private String tipo;
	private String descricao;

	@OneToOne
	@JoinColumn(name="time")
	private Time time;

	@OneToMany(mappedBy="autor", cascade = CascadeType.ALL)
	private List<Postagem> postagens = new ArrayList<Postagem>();

	@OneToMany(mappedBy="autor", cascade = CascadeType.ALL)
	private List<Comentario> comentarios;

	public Autor() {

	}

	public Autor(String name, String userName, String senha, String email) {

		setName(name);
		setUserName(userName);
		setSenha(senha);
		setEmail(email);
		this.tipo = "autor";

	}

	public String getTipo() {

		return tipo;

	}

	public void setTipo(String tipo) {

		this.tipo = tipo;

	}

	public String getDescricao() {

		return descricao;

	}

	public void setDescricao(String descricao) {

		this.descricao = descricao;

	}

	public Time getTime() {

		return time;

	}

	public void setTime(Time time) {

		this.time = time;

	}

	public List<Postagem> getPostagens() {

		return postagens;

	}

	public void addPostagem(Postagem p) {
		
		postagens.add(p);
		
	}

	public void setPostagens(List<Postagem> postagens) {

		this.postagens = postagens;

	}

	public List<Comentario> getComentarios() {

		return comentarios;

	}

	public void setComentarios(List<Comentario> comentarios) {

		this.comentarios = comentarios;

	}

}

classe Time

package Model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Time {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private String nomeDoTime;

	@OneToMany(mappedBy="time", cascade = CascadeType.ALL)
	private List<Autor> autores;

	public Time() {

	}

	public Time(String nomeDoTime) {

		this.nomeDoTime = nomeDoTime;

	}

	public int getId() {

		return id;

	}

	public void setId(int id) {

		this.id = id;

	}

	public String getNomeDoTime() {

		return nomeDoTime;

	}

	public void setNomeDoTime(String nomeDoTime) {

		this.nomeDoTime = nomeDoTime;

	}

	public List<Autor> getAutores() {

		return autores;

	}

	public void setAutores(List<Autor> autores) {

		this.autores = autores;

	}
	
	public String toString() {

		return "Time: " + nomeDoTime;

	}

}

andersonrc, tenta fazer essas alterações nas suas entidades.

@Entity
@DiscriminatorValue("AUTOR")
public class Autor extends Usuario {

    private String tipo;   
    private String descricao;   

 // se de um lado é OneToMany, do outro é ManyToOne
    @ManyToOne
    @JoinColumn(name="time")
    private Time time;

@Entity   
public class Time {   
  
    @Id   
    @GeneratedValue(strategy=GenerationType.IDENTITY)   
    private int id;   
    private String nomeDoTime;   

 // faz tudo menos deletar.
    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}) 
    private List<Autor> autores;  
  
    private String tipo;   
    private String descricao;   
  
    @OneToOne   
    @JoinColumn(name="time")   
    private Time time;

Pode ser que funcione.

Abraço.

Schwingel