Pergunta

Com o Hibernate, você pode criar uma composição de IDENTIFICAÇÃO, onde uma das colunas do mapeamento para a IDENTIFICAÇÃO pode ter valores nulos?

Este é lidar com um legado tabela que tem uma chave única que pode ter valores nulos, mas nenhuma chave primária.

Eu percebo que eu poderia simplesmente adicionar uma nova coluna de chave primária para a tabela, mas eu estou querendo saber se há alguma maneira de evitar isso.

Foi útil?

Solução

Não.Chaves primárias não podem ser null.

Outras dicas

Isso não é aconselhável.Você poderia usar um modo de exibição e o mapa que de vez?Você pode usar a função COALESCE para fornecer um padrão, se você está preso com dados legados.Tivemos muitos problemas com chaves compostas e eu imagino valores nulos vai causar ainda mais problemas.

Para chaves compostas (presume-se que o banco de dados permite valores nulos em PKs) você pode ter o máximo de number_of_cols^2 - 1 entradas que contêm valores nulos (por exemplo de chave composta de 2 colunas você pode ter 3 linhas de ter em sua chave primária nulo, o quarto é o PK sem valores nulos).

Por que você iria querer fazer isso?Seu composto de IDENTIFICAÇÃO deve mapear a chave primária da tabela, e isso não parece sábio, para colocar valores nulos em uma chave, não é?

EDITAR: O Hibernate não permitir a fazê-lo;você pode colocar a propriedade fora a chave e ajustar o DAO um pouco para entrar em campo em conta, sempre que necessário

Você não vai ter erro, mas o Hibernate não vai ser capaz de mapear as linhas com valor NULO para o composto de coluna para a sua Entidade.Isso significa que você obter entidade com valores NULOS no resultado.

Infelizmente, não.Eu teria que usar uma solução alternativa:

Eu usei composit Id para um modo de exibição(!não tabela) onde as linhas podem ser identificadas por 2 cols exatamente (A, B).Embora um dos cols (B) pode ter valores nulos, bem como números inteiros positivos.Então a minha solução é que eu criei uma nova coluna no modo de exibição:"Chave" e a minha opinião é escrito como se B for nulo, então o valor da Chave é -1 else Chave = B.(Apenas números inteiros positivos que aconteça em B e nulo).Eu também mudei o meu composit identificação de implementação para usar Chave em vez de B.Espero que ajude alguém..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top