Olá pessoal, estou utilizando JPA e o BD Postgres.
Eu tenho um relacionamento 1 pra 1 obrigatório. Como eu represento isso na minha classe de entidade?
Pesquisei e vi que tem as seguintes formas:
@OneToOne(optional=false)
@JoinColumn(name="codigoConsulta") //chave estrangeira.
private Consulta consulta;
No BD a tabela é gerada da seguinte forma:
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;
A segunda forma é:
@OneToOne()
@JoinColumn(name="codigoConsulta",nullable=false) //chave estrangeira.
private Consulta consulta;
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?
Agradeço desde já,
Dina

