Chave composta mapeamento bidirecional Hibernate

2 respostas
jingle

Olá tenho o seguinte caso:

tabela:
PostoOperativo tem varios AtributoPostoOperativo, porem cada relacionamento vai precisar ter um valor, até ai tudo bem criei o PostoOperativo criei AtributoPostoOperativo e criei a classe de relacionamento utilizando chave composta:

public class PostoOperativoAtributoPostoOperativo implements Serializable {
	private static final long serialVersionUID = 8531587574211341692L;

	@Embeddable
	public static class PK implements Serializable {

		/**
		 * 
		 */
		private static final long serialVersionUID = -867288886433637819L;

		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "posto_operativo_id", nullable = false)
		private PostoOperativo postoOperativo;

		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "atributo_posto_operativo_id", nullable = false)
		private AtributoPostoOperativo atributoPostoOperativo;

                //get  e sets...

	}

	@Column(nullable = false, length = 10)
	private String valor;

	@EmbeddedId
	private PK id;
         //get  e sets...
}

agora minha duvida é como fazer o outro lado do mapeamento (no PostoOperativo mapear que ele possui varios atributos porém utilizando a classe de relacionamento pq vo precisa do valor e dos atributos dele.)

grato.

2 Respostas

jingle

depois de apanhar aos monte consegui da seguinte forma.

inserido no PostoOperativo:

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

Bom dia

Olha vc vai ter que criar uma terceira classe para falar pra hibernate que é uma chave composta. vou exemplificar em tres classes Pessoa e Endereco e a terceira seria EnderecoPK. Observe a calse EnderecoPK a anotacao @Embeddable. espero ter ajudado.

[quote]
\Classe Pessoa

@Entity

@Table(name = PESSOA)

public class Pessoa2 implements Serializable {

private static final long serialVersionUID = 1L;

@Id

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “ID”)

private Integer id;

@Column(name = “NOME”)

private String nome;

@Column(name = “DATANASCIMENTO”)

@Temporal(TemporalType.DATE)

private Date datanascimento;

@OneToMany(cascade = CascadeType.ALL, mappedBy = “pessoa”)

private Collection enderecoCollection;



}

// Classe Endereco

@Entity

@Table(name = ENDERECO)

public class Endereco implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId

protected EnderecoPK enderecoPK;

@Column(name = LOUGRADOURO)

private String lougradouro;

@Column(name = BAIRRO)

private String bairro;

@JoinColumn(name = IDPESSOA, referencedColumnName = ID, insertable = false, updatable = false)

@ManyToOne(optional = false)

private Pessoa2 pessoa;



}

// EnderecoPK

@Embeddable

public class EnderecoPK implements Serializable {

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “ID”)

private int id;

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@Column(name = “IDPESSOA”)

private int idpessoa;



}
Criado 27 de julho de 2010
Ultima resposta 27 de jul. de 2010
Respostas 2
Participantes 2