[Resolvido] Integridade Referencial Hibernate

6 respostas
R

Olá galera,
Sou novo em java gostaria de saber como faço para obter a integridade entre 3 tabelas:
exemplo

tenho uma Produto:

@Entity
public class Produto {
	
	@Id
	private Long code;
	private String nome;

Uma usuario:

@Entity
public class Usuario {
	
	@Id
	private Long cpf;
	
	private String nome;
       //Outros atributos

Preciso gerar uma terceira tabela onde a mesma terá a integridade com as Pk’s das duas primeiras, pois preciso garantir q a uma pessoa tem somente um voto para um produto.
Algo do tipo

@Entity
public class Voto {
	
	@JoinColumn(name = "usuario", referencedColumnName = "cpf")
	@OneToOne
	private Usuario usuario;
	
	@JoinColumn(name = "produto", referencedColumnName = "code")
	@OneToOne
	private Produto produto;
}

Não sei como fazer isso! alguem poderia me dar uma força?
obrigado

6 Respostas

Hebert_Coelho

Oq seria integridade para você?

R

Algo que vai me garantir uma segurança ou certeza de algo é unico…(neste caso)

“Referencial” e não Relacional como coloquei no tópico

R

?

WRYEL

Eu faria assim:

@Embeddable 
public class VotoPK implements Serializable {
    @JoinColumn(name = "usuario", referencedColumnName = "cpf")  
    @OneToOne  
    private Usuario usuario;  
      
    @JoinColumn(name = "produto", referencedColumnName = "code")  
    @OneToOne  
    private Produto produto;
}

@Entity
public class Voto {
    @EmbeddedId
    private VotoPK votoPK;
}

não me lembro agora, mas, chutaria que precisa criar uma constraint correta no seu respectivo banco na tabela de voto (UNIQUE CONSTRAINT).

rimolive

WRYEL:
Eu faria assim:

@Embeddable 
public class VotoPK implements Serializable {
    @JoinColumn(name = "usuario", referencedColumnName = "cpf")  
    @OneToOne  
    private Usuario usuario;  
      
    @JoinColumn(name = "produto", referencedColumnName = "code")  
    @OneToOne  
    private Produto produto;
}

@Entity
public class Voto {
    @EmbeddedId
    private VotoPK votoPK;
}

não me lembro agora, mas, chutaria que precisa criar uma constraint correta no seu respectivo banco na tabela de voto (UNIQUE CONSTRAINT).

Então nesse caso o melhor é utilizar o atributo uniqueConstraints da anotação @Table:

@Entity
@Table(
   name="VOTO",
   uniqueConstraints={
      @UniqueConstraint(columnNames={"usuario","produto"})
   }
)
public class VotoPK implements Serializable {

    @JoinColumn(name = "usuario", referencedColumnName = "cpf")  
    @OneToOne  
    private Usuario usuario;  
      
    @JoinColumn(name = "produto", referencedColumnName = "code")  
    @OneToOne  
    private Produto produto;
}
R

Pessoal vlw mesmo!
Era justamente isso que eu preciso, deu certo aqui esse relacionamento…

obrigado pela paciencia…

:smiley:

Criado 29 de fevereiro de 2012
Ultima resposta 6 de mar. de 2012
Respostas 6
Participantes 4