Pessoal estou tentando realizar uma mapeamento entre duas entidades com colunas extras. Entretanto não estou tendo muito sucesso com o mesmo
pois quando tento rodar a aplicação o sistema me dá um erro de stackOverflow null. Até o momento não consequi solucionar o problema venho
seguindo alguns tutoriais mais sem sucesso acredito que deva ser alguma particularidade que estou errando por isso venho aqui pedi ajuda de vcs. Alguém pode me passar
algum material ou até mesmo algum toque que possam me dar para resolver o problema. Agradeço a ajuda. Estou mandando o código de mapeamento que estou fazendo
pra que alguém de vocês possam olhar.
Entidade Operadora que se relaciona com a entidade Rota
@Entity
@Table (name="operadora")
public class Operadora {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private long idOperadora;
@Column (length=20)
@NotNull
private String descricao;
@OneToMany(mappedBy="operadora", cascade=CascadeType.ALL)
private Collection<Mensagem> listaMensagens;
@NotNull
private boolean ativo;
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "pk.aluno",
cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private Collection<OperadoraRota>listaOperadoraRotas;
}
Entidade Rota
@Entity
@Table(name = "rota")
public class Rota {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="idRota")
private long idRota;
@Column(length = 50)
@NotNull
private String descricao;
@Column(length = 20)
@NotNull
private String login;
@Column(length = 20)
@NotNull
private String senha;
@Column(length = 50)
@NotNull
private String endereco;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.rota", cascade = {
CascadeType.PERSIST, CascadeType.MERGE })
@Cascade( { org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private Collection<OperadoraRota> listaOperadoraRotas;
}
A seguir duas Classe intermediárias que são utilizadas para fazer a ligação entre os dois objetos e criar um terceira tabela no banco com o id das duas entidades operadora e rota e outras colunas.
[code]
@Entity
@Table(name=“operadorarota”)
@AssociationOverrides({@AssociationOverride(name=“pk.operadora”, joinColumns=@JoinColumn(name=“idOperadora”)),
@AssociationOverride (name=“pk.rota”,joinColumns=@JoinColumn(name=“idRota”))})
public class OperadoraRota {
@EmbeddedId
private OperadoraRota pk = new OperadoraRota();
@Column
private double tarifaUnidade;
@Column
private boolean rotaPadrao;
public OperadoraRota() {
}
public OperadoraRota getPk() {
return pk;
}
public void setPk(OperadoraRota pk) {
this.pk = pk;
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
OperadoraRota that = (OperadoraRota) o;
if (getPk() != null ? !getPk().equals(that.getPk())
: that.getPk() != null) {
return false;
}
return true;
}
@Transient
public Operadora getOperadora() {
return this.getPk().getOperadora();
}
@Transient
public Rota getRota() {
return this.getPk().getRota();
}
public int hasCode() {
return (getPk() != null ? getPk().hasCode() : 0);
}
}[/code]
public class OperadoraRotaPk implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Operadora operadora;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Rota rota;
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
if (!(o instanceof OperadoraRotaPk))
return false;
OperadoraRotaPk that = (OperadoraRotaPk) o;
if (this.operadora != null ? !this.operadora.equals(that.operadora)
: that.operadora != null)
return false;
if (this.rota != null ? !this.rota.equals(that.rota)
: that.rota != null)
return false;
return true;
}
public int hashCode() {
int result;
result = (this.operadora != null ? this.operadora.hashCode() : 0);
result = 31 * result + (this.rota != null ? this.rota.hashCode() : 0);
return result;
}
}