Hibernate Relacionamento - RESOLVIDO

7 respostas
J

Boa Tarde estou com o seguinte problema tenho uma entidade que id chave composta e tenho um campo que e chave unica(unique) tem como eu fazer relacionamento pela chave unica em vez da primary key no hibernate hj para fazer relacionamento uso @ManyToOne

Obrigado !!!
Joao Vitor

7 Respostas

M

Este codigo esta atualmente rodando em um sistema

@ManyToOne
	@JoinColumns(
			value={@JoinColumn(name="CD_SOLICITACAO", referencedColumnName="CD_SOLICITACAO"),
					@JoinColumn(name="CD_ENTIDADE", referencedColumnName="CD_ENTIDADE")})
private Solicitante solicitante;
J

marcelux:
Este codigo esta atualmente rodando em um sistema

@ManyToOne
	@JoinColumns(
			value={@JoinColumn(name="CD_SOLICITACAO", referencedColumnName="CD_SOLICITACAO"),
					@JoinColumn(name="CD_ENTIDADE", referencedColumnName="CD_ENTIDADE")})
private Solicitante solicitante;

Isso que vc fez e relacionar uma chave composta que e a primary key certo eu quero relacionar pelo indice que e unique nao pela chave primary key.

L

o jeito eh com essas join columns mesmo… mas já vai se preparando, q algumas operações não vão funcionar direito se vc não usar a primary key como relacionamento (ou pelo menos eu não fui capaz de fazer funcionar :P)

J

Lucas entao relacionar pela chave unique nao tem jeito exemplo de uma codigo

@Entity
@Table(name="PES",uniqueConstraints={@UniqueConstraint(columnNames={"cpf"})})
public class Pessoa {
	@Id
	private Integer Id;
	private String nome;
	@Column(unique=true)
	private String cpf;
}

@Embeddable
public class PrkPessoaDoc implements Serializable {
	private Integer id_endereco;
	private String cpfdoc;
}

@Entity
public class PessoaDoc {
	@EmbeddedId
	private PrkPessoaDoc id;
	//NAO FUNCIONA
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="cpfdoc",referencedColumnName="cpf",insertable=false,updatable=false)
	private Pessoa pessoa;
}

Em PessoaDoc relacionamento ai nao esta funcionando pela chave unique ?

L

não sei, vc testou?

J

sim testei na hora de subir a aplicacao da exception.

Caused by: org.hibernate.AnnotationException: referencedColumnNames(cpf) of br.com.tms.modelo.PessoaDoc.cpf referencing br.com.tms.modelo.Pessoa not mapped to a single property
J

RESOLVIDO desta forma

@Embeddable
public class PrkPessoa implements Serializable {
   private Integer id;
   private String cpf;
}

@Entity
@Table(name="PES",uniqueConstraints={@UniqueConstraint(columnNames={"cpf"})})
public class Pessoa {
   @EmbeddableId
   private PrkPessoa Id;
   private String nome;
   //ESPELHO CAMPO para reconhecer UNIQUE KEY ai JoinColumn Funciona
   @Column(name="cpf",insertable=false,updatable=false)
   private String idcpf;
}

@Embeddable
public class PrkPessoaDoc implements Serializable {
   private Integer id_endereco;
   private String cpfdoc;
}

@Entity
public class PessoaDoc {
   @EmbeddedId
   private PrkPessoaDoc id;
   @ManyToOne(fetch=FetchType.LAZY)      
   @JoinColumn(name="cpfdoc",referencedColumnName="cpf",insertable=false,updatable=false)
   private Pessoa pessoa;
}
Criado 20 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 7
Participantes 3