Meu problema é que quando eu tendo adicionar uma nova peça, se
alguma das peças já cadastradas possuir a mesma especificação desta peça,
eu não consigo adicionar esta peça na lista de peças do fabricante pois a
especificação violará NonUniqueObjectException da sessão.
Quando eu tento adicionar a peça “P3” - “E1” eu não consigo a não
ser que eu caminhe pela lista de peças de “F1” buscando essa especificacao e a
use caso eu a encontre.
Essa busca seria muito custosa quando eu tivesse um numero elevado de peças.
Cara eu dei uma olhada mais ou menos na sua dúvida, não deu pra entender muito bem o seu problema mas a modelagem do seu banco imagino que esteja assim:
[code]Tabela Fabricante
PK idFabricante
FK idPeca
fabricante
Nesse caso, como a tabela Peça tem uma chave estrangeira em Especificação, não importa o número de peças que você tem porque a sua tabela e especificações estará agrupada, ou seja, sem 1 peça com a especificação ‘Chave de fenda’ ou mil peças com a especificação ‘Chave de fenda’, na sua tabela de especificações você terá apenas uma linha:
idEspecificacao Especificacao
0 Chave de Fenda
Se você quiser normalizar seu banco dessa forma, não vejo outra forma de inserir uma nova peça sem descobrir se na tabela de especificacao já existe essa especificação ou não… Sei lá, coloca um ComboBox com todas as especificações exsitentes na tabela pro cara escolher, e a última opção do ComboBox você colocar ‘Outra…’, se o cara escolher essa opção você abre uma janela pra ele poder inserir uma nova especificação!!!
Espero ter ajudado e não complicado mais…hehehhehehe!!!
jj_df muito obrigado pela sua resposta. Resolvi o problema fechando a sessão antes de inserir uma nova peça e usando merge para atualizar a lista de peças do fabricante.