Deixa eu explicar bem meu problema… Talvez alguém já tenha passado por isso, ou saiba pelo menos o caminho a seguir…
Explicando…
Eu tenho um bd legado, onde, entre outras, tenho uma tabela USUARIO e uma MAPA o relacionamento dessas tabelas é N:M, ou seja, um USUARIO pode acessar vários mapas e um MAPA pode ser acessado por vários usuarios.
Devido a esse relacionamento, o hibernate criou uma tabela de relacionamento com o nome USUARIO_MAPA, que consta somente duas colunas, USUARIOS_ID e MAPAS_ID, onde é feita a ligação das duas tabelas…
O que eu estou fazendo é o seguinte, todas essas tabelas que tenho no meu bd são mapeadas pelo hibernate por suas classes, as Entitys. Através dessas classes e seus DAOS eu estou serializando o conteúdo das tabelas em arquivos XML. Esses arquivos estão sendo utilizados como uma forma de backup e resturação desse banco, além também da possível troca de SGBD…
Eu serializo em XML e depois desserializo e persisto novamente no BD.
O meu problema é o seguinte, para gerar esse XML, eu precisei criar o entity para a tabela de relacionamentob[/b] que foi gerada pelo hibernate, porém, essa classe como tem somente dois atributos USUARIOS_ID e MAPAS_ID precisa ter uma coluna @Id. Então se eu deixo somente a coluna USUARIOS_ID com o annotation @Id, não consigo que usuários diferentes tenham acesso ao mesmo mapa… caso altere o annotation para MAPAS_ID, não consigo que um usuário tenha acesso a mais de um mapa…
Segue o cód. dessa class…
[code]import javax.persistence.Entity;
import javax.persistence.Id;
@SuppressWarnings("serial")
@Entity
public class Usuario_Mapa extends CiaEntity {
@Id
private long usuario_id;
private long mapas_id;
public Usuario_Mapa() {
// TODO Auto-generated constructor stub
}
public long getUsuario_id() {
return usuario_id;
}
public void setUsuario_id(long usuario_id) {
this.usuario_id = usuario_id;
}
public long getMapas_id() {
return mapas_id;
}
public void setMapas_id(long mapas_id) {
this.mapas_id = mapas_id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (mapas_id ^ (mapas_id >>> 32));
result = prime * result + (int) (usuario_id ^ (usuario_id >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Usuario_Mapa other = (Usuario_Mapa) obj;
if (mapas_id != other.mapas_id)
return false;
if (usuario_id != other.usuario_id)
return false;
return true;
}
}[/code]
Já tentei várias saídas, inclusive deixando as duas colunas com @Id, como uma chave composta… mas até agora não tive sucesso…
Alguém pode ajudar com isso?
[]'s