Erro mapeamento hibernate annotations

5 respostas
C

Olá!
Tenho o seguinte relacionamento:

5 Respostas

eltonads

Não faltou nada não?
Tipo… o erro e tal? :stuck_out_tongue:

Att.,

C

Apertei enter por engano e nem terminei a msg e já mandou…

continuando, estou sofrendo pra fazer o mapeamento desse relacionamento com hibernate annotations.

Minha classe categoria:

@Entity
@Table(name = "CATEGORIA")
public class Categoria extends TransferObject {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	@Column(name = "idCategoria")
	private Long id;

	@Column(name = "DescricaoCategoria")
	private String descricao;
	
	@OneToMany (mappedBy = "categoria", fetch = FetchType.LAZY)
	@Cascade (CascadeType.ALL)
	private Set<Equipamentos> equipamentos = new HashSet<Equipamentos>();

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	
	public Set<Equipamentos> getEquipamentos() {
		return equipamentos;
	}

	public void setEquipamentos(Set<Equipamentos> equipamentos) {
		this.equipamentos = equipamentos;
	}

classe dependencia:

@Entity
@Table (name = "DEPENDENCIA")
public class Dependencia {

	private static final long serialVersionUID = 1L;

	@Id @GeneratedValue (strategy = GenerationType.SEQUENCE)
	@Column (name = "idDependencia")
	private Long id;
	
	@Id 
	@Column (name = "idSubordinada")
	private Long subordinada;
	
	@Column (name = "SG_UF")
	private String estado;
	
	@OneToMany(mappedBy = "dependencia", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Set<Equipamentos> equipamentos = new HashSet<Equipamentos>();

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Long getSubordinada() {
		return subordinada;
	}

	public void setSubordinada(Long subordinada) {
		this.subordinada = subordinada;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	
	public Set<Equipamentos> getEquipamentos() {
		return equipamentos;
	}

	public void setEquipamentos(Set<Equipamentos> equipamentos) {
		this.equipamentos = equipamentos;
	}

E a classe equipamento

@Entity
@Table (name = "EQPO_TI")
public class Equipamentos extends TransferObject {

	private static final long serialVersionUID = 1L; 

	@Id @GeneratedValue (strategy = GenerationType.SEQUENCE)
	@Column (name = "idEquipamento")
	private Long id;

	@ManyToOne (cascade = {}, fetch = FetchType.LAZY) 
	@JoinColumns ({
			@JoinColumn (name = "idDependencia"),
			@JoinColumn (name = "idSubordinada")
	})	
	private Dependencia dependencia;
	
	@ManyToOne (cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn (name = "idCategoria")
	private CategoriaEquipamento categoria;
	
	@Id
	@Column (name = "codIdentificacao")
	private Long mac;
	
	@Column (name = "nomeEqpo")
	private String descricao;
	
	@Column (name = "Data")
	private Date data;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	
	public CategoriaEquipamento getCategoria() {
		return categoria;
	}

	public void setCategoria(CategoriaEquipamento categoria) {
		this.categoria = categoria;
	}

	
	public Dependencia getDependencia() {
		return dependencia;
	}

	public void setDependencia(Dependencia dependencia) {
		this.dependencia = dependencia;
	}

	public Long getMac() {
		return mac;
	}

	public void setMac(Long mac) {
		this.mac = mac;
	}

Tá me trazendo esse erro:

eltonads

O erro está aí:

@ManyToOne (cascade = {}, fetch = FetchType.LAZY) 
@JoinColumns ({ 
@JoinColumn (name = "idDependencia"), 
@JoinColumn (name = "idSubordinada") 
}) 
private Dependencia dependencia;

A chave primária de Depencia no mapeamento que você fez para a classe “Dependencia” possui apenas uma chave, entretanto você está referenciando-a com duas JoinColumns. Pelo que entendi um equipamento possui duas dependencias, ou algo assim… Neste caso você deve mapear um objeto Dependencia duas vezes, cada um com uma Join Column diferente…

Bom… isso foi o que entendi também, afinal é 10 pras 18h por aqui… Cérebro nao funciona mais :slight_smile:

Boa sorte aí, espero ter ajudado.

Att.,

C

Se você ver no mapeamento, vai observar que a tabela dependência possui as 2 chaves primárias!

O que eu não sei é se eu posso referenciar isso da forma que estou fazendo.

Na tabela dependência eu vou ter o prefixo (idPrefixo).
E cada prefixo pode ter N subordinadas, por isso tenho também a PK idSubordinada.

Preciso das 2 chaves primárias… O relacionamento do BD não fui eu que fiz. Me deram a demanda e esse relacionamento…

eltonads

Ah sim… vi agora.
Não sei se funciona legal isso cara, duas anotações @Id na classe…
Aqui onde trabalho utilizamos uma classe para as chaves compostas, e anotamos com @EmbeddedId… Procure na documentação do Hibernate, por que desse jeito eu tenho certeza que funciona!

Att.,

Criado 2 de fevereiro de 2009
Ultima resposta 3 de fev. de 2009
Respostas 5
Participantes 2