Chave composta com chaves estrangeiras + Hibernate

1 resposta
jingle

Olá tenho a seguinte situação

Uma tabela chamada PostoOperativo e uma tabela Chamada AtributoPostoOperativo

até ai tudo bem... o problema é que preciso criar uma tabela de relacionamento PostoOperativoAtributoPostoOperativo onde a chave primaria vai ser uma chave composta com duas chave estrangeiras uma pra PostoOperativo outra Para AtributoPostoOperativo.

Estou tentando da seguinte forma PostoOperativo:
@Entity
@Table(name = "posto_operativo")
public class PostoOperativo implements Serializable {
//outros campos id, descricao etc...
...

@OneToMany(mappedBy = "id.postoOperativo", targetEntity = PostoOperativoAtributoPostoOperativo.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<PostoOperativoAtributoPostoOperativo> postoOperativoAtributoPostoOperativo;

//GetSet
..
}
AtributoPostoOperativo:
@Entity
@Table(name = "atributo_posto_operativo")
public class AtributoPostoOperativo implements Serializable {
//outros campos id, descricao etc...
...

@OneToMany(mappedBy = "id.atributoPostoOperativo", targetEntity = PostoOperativoAtributoPostoOperativo.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<PostoOperativoAtributoPostoOperativo> postoOperativoAtributoPostoOperativo;

//GetSet

}
PostoOperativoAtributoPostoOperativo :
@Entity
@Table(name = "posto_operativo_atributo_posto_operativo")
public class PostoOperativoAtributoPostoOperativo implements Serializable {

	private static final long serialVersionUID = 8531587574211341692L;


	@EmbeddedId
	private PK id;

        //outros campos....


	@Embeddable
	public static class PK implements Serializable {
		private static final long serialVersionUID = -867288886433637819L;

		@ManyToOne(fetch = FetchType.EAGER)
		@NotNull(message = "Campo 'posto operativo' deve ser preenchido.")
		@JoinColumn(name = "posto_operativo_id", nullable = false)
		private PostoOperativo postoOperativo;

		@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
				CascadeType.PERSIST, CascadeType.REMOVE })
		@NotNull(message = "Campo 'atributo posto operativo' deve ser preenchido.")
		@JoinColumn(name = "atributo_posto_operativo_id", nullable = false)
		private AtributoPostoOperativo atributoPostoOperativo;

                 //getsets...
	}
}

Preciso que ao salvar/alterar/excluir os itens de posto operativo ele faça as alteraçoes necessarias na tabela de relacionamento.

qndo tento alterar o postoOperativo colocando novos itens ou removendo ou deixando como esta mesmo... ele parece que entra em loop e da stackoverflow

1 Resposta

jingle

alguém tem ao menos um exemplo de como fazer chave composta e que funcione o cascade? tentei até o delete orphan e n ta rolando…

Criado 26 de agosto de 2010
Ultima resposta 26 de ago. de 2010
Respostas 1
Participantes 1