CREATE TABLE pedidoexame
(
codigopedidoexame bigint NOT NULL,
codigoconsulta bigint NOT NULL,
CONSTRAINT pedidoexame_pkey PRIMARY KEY (codigopedidoexame),
CONSTRAINT fkd9e5afc1335036c8 FOREIGN KEY (codigoconsulta)
REFERENCES consulta (codigoconsulta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT pedidoexame_codigoconsulta_key UNIQUE (codigoconsulta)
)
WITH (
OIDS=FALSE
);
ALTER TABLE pedidoexame OWNER TO postgres;
E a tabela no BD com o código acima é gerada da seguinte forma:
-- Table: pedidoexame
-- DROP TABLE pedidoexame;
CREATE TABLE pedidoexame
(
codigopedidoexame bigint NOT NULL,
codigoconsulta bigint NOT NULL,
CONSTRAINT pedidoexame_pkey PRIMARY KEY (codigopedidoexame),
CONSTRAINT fkd9e5afc1335036c8 FOREIGN KEY (codigoconsulta)
REFERENCES consulta (codigoconsulta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE pedidoexame OWNER TO postgres;
Ou seja a diferença é que ao usar optional=false a seguinte linha aparece: CONSTRAINT pedidoexame_codigoconsulta_key UNIQUE (codigoconsulta)
Seria o correto para representar a relação 1 pra 1 obrigatório o optional?
Depende. O que é dito nos seus requisitos?
Um pedido de exame SEMPRE tem uma consulta? Então o optional é false.
Pode existir um pedido sem uma consulta? Então optional é true.
David,
Só uma coisa:
Qdo o relacionamento é N pra M, não dá pra colocar o optional?
@ManyToMany(targetEntity=Exame.class)
@JoinTable(name="exame_pedidoExame", joinColumns=@JoinColumn(name="codigoExame", nullable=false), inverseJoinColumns=@JoinColumn(name="codigoPedidoExame", nullable=false))
private List<Exame> exames;
onde eu colocaria nesse caso o optional? Tentei e não tá dando certo…
Obrigada…!
[quote=dina]David,
Só uma coisa:
Qdo o relacionamento é N pra M, não dá pra colocar o optional?
@ManyToMany(targetEntity=Exame.class)
@JoinTable(name="exame_pedidoExame", joinColumns=@JoinColumn(name="codigoExame", nullable=false), inverseJoinColumns=@JoinColumn(name="codigoPedidoExame", nullable=false))
private List<Exame> exames;
onde eu colocaria nesse caso o optional? Tentei e não tá dando certo…
Obrigada…![/quote]
Olá.
Então, um relacionamento NxM é “opcional por natureza”. Seria mais ou menos 0…* x 0…*. Você está usando JPA? Qual implementação? Se for a implementação do Hibernate você pode usar um validador para verificar a quantidade de elementos na List.
Ficaria algo como:
@ManyToMany(targetEntity=Exame.class)
@JoinTable(name="exame_pedidoExame", joinColumns=@JoinColumn(name="codigoExame", nullable=false), inverseJoinColumns=@JoinColumn(name="codigoPedidoExame", nullable=false))
// deve existir no mínimo 1
@Length(min=1)
private List<Exame> exames;
Note que essa restrição não vai ser empregada no modelo físico do banco, mas vai ser controlada pelo mecanismo de validação do Hibernate.