MySql e Jpa, dúvida cruel!

12 respostas
C

Olá pessoal, tenho a seguinte situação: PRODUTOS * ---- 0…1 PROMOÇÕES.

como ficariam minhas tabelas? no mysql quando coloco uma fk (ID_PROMOCOES) do tipo int em produtos, o mesmo não aceita null, mais o produto pode ou não ter uma promoção, assim sendo as vezes esta fk em produtos irá ficar vazia, só que o bd não aceita por o campo ser int, o que fazer??? Não sei se qual é a melhor opção JoinTable ou JoinColumn, mais primeiramente presiso resolver o problema de construir as tebelas, alguém me ajuda???

12 Respostas

Marck

Olá!

Voce pode colocar em uma tabela N.N:

tblProduto ------- tblPromocoes

tblProdutoPromocoes

Na tblProdutoPromocoes vc tem a chave do produto e a chave da promoção.

abraço

Z

Olá clarinetabest,

Não entendi o pq vc não consegue deixar com a opção que o atributo seja null. Vc está usando o MySql GUI tools para criar as tabelas?
Tente ver se já está com a opção not null selecionada.

abss

C

mais cada produto so pode conter uma promoção.

C

Estou utilizando o MySql GUI tools sim

Marck

ahh me desculpa, li na pressa.

Como o amigo disse, quando vc cria a tabela, pode ser que vc tenha selecionado a opção not null.

C

O id (int) da promoção tem que aceitar null, pois em um dado momento o produto pode estar em promoção ou não, entendeu?

C

a opção not null não esta marcada. O que será que estou fazendo de errado

C

esta sendo lançada uma exceção no banco dizendo :
Incorrect Integer Value for column “ID_PROMOCOES” at row 1. O que deve ser?

Marck

Bom, só pode ser isso.
La no query browser, clica nessa tabela copia ela e cola aqui p a gente poder dar uma olhada na estrutura dela.

C

Eis a estrutura dela, veja o que esta acontecendo!!!

DROP TABLE IF EXISTS `business_web`.`produtos`;
CREATE TABLE  `business_web`.`produtos` (
  `ID_PRODUTOS` int(10) unsigned NOT NULL,
  `QUANTIDADE_EXISTENTE` int(10) unsigned NOT NULL,
  `VALOR` double(7,2) NOT NULL,
  `ID_TIPO_PRODUTOS` int(10) unsigned NOT NULL,
  `DESCRICAO` varchar(45) NOT NULL,
  `ID_FORNECEDORES` int(10) unsigned NOT NULL,
  `UNIDADE_MEDIDA` varchar(45) NOT NULL,
  `QUANTIDADE_UNIDADE_MEDIDA` varchar(45) NOT NULL,
  `NOME` varchar(45) NOT NULL,
  `ID_PROMOCOES` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`ID_PRODUTOS`),
  UNIQUE KEY `INDEX_NOME_UNIQUE` (`NOME`),
  KEY `FK_PRODUTOS_TIPO_PRODUTOS` (`ID_TIPO_PRODUTOS`) USING BTREE,
  KEY `FK_PRODUTOS_FORNECEDORES` (`ID_FORNECEDORES`),
  KEY `FK_PRODUTOS_PROMOCOES` (`ID_PROMOCOES`),
  CONSTRAINT `FK_PRODUTOS_FORNECEDORES` FOREIGN KEY (`ID_FORNECEDORES`) REFERENCES `fornecedores` (`ID_FORNECEDORES`) ON DELETE CASCADE,
  CONSTRAINT `FK_PRODUTOS_PROMOCOES` FOREIGN KEY (`ID_PROMOCOES`) REFERENCES `promocoes` (`ID_PROMOCOES`) ON DELETE CASCADE,
  CONSTRAINT `FK_PRODUTOS_TIPO_PRODUTOS` FOREIGN KEY (`ID_TIPO_PRODUTOS`) REFERENCES `tipo_produtos` (`ID_TIPO_PRODUTOS`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Z

Olá,

Acho que vc está tentando colocar null clicando no campo e digitando ‘null’ ou então vc está tentando deixar o campo vazio e ver se aparece null.

Tente fazer assim na parte de criar query:

UPDATE produtos SET ID_PROMOCOES = null WHERE ID_PRODUTOS = 1;

abss

C

beleza ta tudo certo obrigado, erro meu desculpe!!!

Criado 8 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 12
Participantes 3