Dúvida Hibernate Mapeamento OneToOne

Fala galera,

tenho um mapeamento que se repetirá várias vezes na mesma classe, como poderia fazer o hibernate distinguir esse mapeamento por valor de cada mapeamento.

vejam a classe:

public class Carro{
    
    @OneToOne
    private Dominio cor;
   
    @OneToOne
    private Dominio situacao;

}
public class Dominio {
	
	private String cdDominio;
	private String nmDominio;
	private String vlDominio;
	
	
}

Como fazer o Hibernate filtrar em Dominio de acordo com a coluna nmDominio?

Utilizo @OneToOne, mas nunca usei para resolver uma logica como a que você tem, mas talvez ajude

Use as seguintes annotations:

	@JoinColumn(name = "name_column")
	@ForeignKey(name = "fk_name")

Pois você tem dois objetos do mesmo tipo dentro da mesma classe mas concerteza na tabela no banco cada coluna tem um nome certo?
E a segunda annotaion impede que o Hibernate gera uma fk por conta própria.

Qualquer coisa posta ai

Na verdade é a mesma coluna o que difere um do outro é o valor do atributo nmDominio

cara, está meio confuso… porq vc precisa ter um mesmo atributo repetidas vezes? tipo, porq dois Dominios? se só o NOME muda, é um dominio só… se vc precisa de varios, é uma LISTA de dominios, oq faz com q o mapeamento não seja mais oneToOne, manja?! tenta dar uma explicada melhor doq vc ta querendo fazer ai pra gente…

Bem, veja o exemplo são dois atributos do tipo Dominio porém são diferentes e carro só tem 1 cor e 1 situacao e não disse que o NOME muda e sim o VALOR do atributo. maja!?

no banco ficaria assim:

cd_dominio     nm_dominio       vl_dominio
    1               cor              amarelo
    2               cor              verde
    3               cor               preto
    1               situacao        ativo
    2               situacao        inativo

Ninguem nunca montou um mapeamento que tivesse diversos atributos que são objetos contendo apenas código e descrição? Eu só quero manter uma tabela para guardar todos esses caras.

entendi o q vc quer, mas convenhamos que não faz muito sentido num modelo de dados… uma tabela pra tudo quebra qualquer logica de modelagem…XD
O que eu posso sugerir é vc ter uma lista de Dominios no carro, e verificar qual o valor do nome antes de fazer o que vc precisa fazer, manjou?!

Acho que voce nao entendeu, não é uma tabela pra tudo é uma tabela para código e descrição. Me diz, pra que ter 10 tabelas guardando chave e valor se eu posso ter uma.

se vc esta falando isso, o modelo de dados esta errado ainda assim, porq vc precis ter UMA coluna pro nome?

cd_dominio     nm_dominio       vl_dominio  
    1               cor              amarelo  
    2               cor              verde  
    3               cor               preto  
    1               situacao        ativo  
    2               situacao        inativo  

se vc quer ter cor e situação, ficaria muito melhor assim:

cd_dominio     cor            situacao
    1               amarelo      ativo
    2               verde         inativo
    3               preto         null

desse modo, vc tambem evita repetições na sua base de dados.XD
era isso?!

Valeu a intenção camarada, mas acho que ainda não entendeu cor e situacao nao tem nada a ver uma com a outra, por isso a coluna nome do domino…

Do seu jeito sim, seria uma gambiarra monstruosa.

Bom… vou ficar devendo então, se vc conseguir posta ai pra gente conhecer a solução. Abraço!

Pode usar da seguinte forma, é simples e funciona …

 num_dominio       cd_dominio        vl_dominio
   00001             null             Tabela de Cor
   00001             1                 Verde
   00001             2                 Azul
   00001             3                 Preto

   00002             null             Tabela de Situação
   00002             1                 Ativo
   00002             2                 Inativo

Nesse caso para ler a tabela de cores é so selecionar num_dominio = 00001 e ignorar o header cd_dominio = null e assim por diante …

JackOld, mesmo assim acho que voce ta complicando, o que o amigo acima falou ta certo. E ilogico ter um mesmo Objeto para popular a mesma tabela declarado 2 vezes na classe.

Uma pergunta, talvez se voce responder ela muitos possam lhe ajudar.

O que seria CD_DOMINIO ? porque no exemplo que voce mostrou, um NM_DOMINIO, mesmo que sejam diferentes, podem possuir um mesmo codigo. Entao seria melhor voce explicar qual o seu negocio.

cd_dominio     nm_dominio       vl_dominio    
    1               cor              amarelo    
    2               cor              verde    
    3               cor               preto    
    1               situacao        ativo    
    2               situacao        inativo 

cd_dominio tera valor 1 tanto para cor quanto para situacao, nesse caso. Voce tem um MER ? um diagrama ? se tiver mostre aqui, para que possamos lhe ajudar melhor.

Chutando no escuro, acho que voce pode fazer isto:

public class Carro{  
      
    @OneToOne  
    private Dominio dominio;  
  
}  

E quando voce for persistir, voce faria dominio.setNmDominio(“COR”); e por ai vai. Ate porque na coluna nm_dominio voce nao recebera somente um valor.