Eu tenho esse mapeamento bidirecional One-to-one, o probelma é quando salvo um usuario e a coluna usuario na tabela professor não atualiza o valor. O usuario é criado, o professor é atualizado mas a chave estrangeira usuario continua com o valor NULL.
Tabela Professor:
CREATE TABLE ppgcc.professor
(
id_professor serial NOT NULL,
nome character varying(45) NOT NULL,
email character varying(45) NOT NULL,
website character varying(45),
usuario integer,
CONSTRAINT professor_pkey PRIMARY KEY (id_professor),
CONSTRAINT professor_usuario_fkey FOREIGN KEY (usuario)
REFERENCES ppgcc.usuario (id_usuario) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE SET NULL,
CONSTRAINT professor_usuario_key UNIQUE (usuario)
)
Tabela Usuario:
CREATE TABLE ppgcc.usuario
(
id_usuario serial NOT NULL,
login character varying(45) NOT NULL,
senha character varying(45) NOT NULL,
acesso integer NOT NULL,
CONSTRAINT usuario_pkey PRIMARY KEY (id_usuario),
CONSTRAINT usuario_login_key UNIQUE (login)
)
Mapeamento Professor:
<class name="Professor" schema="ppgcc" table="professor">
<id name="id" type="int" column="id_professor">
<generator class="identity"/>
</id>
<many-to-one name="usuario" class="Usuario" fetch="select" column="usuario" unique="true"/>
<property name="nome" type="string" length="45" column="nome" not-null="true"/>
<property name="email" type="string" length="45" column="email" not-null="true"/>
<property name="website" type="string" length="45" column="website"/>
</class>
Mapeamento Usuario:
<class name="Usuario" table="usuario" schema="ppgcc">
<id name="id" type="int" column="id_usuario">
<generator class="identity" />
</id>
<property name="login" type="string" column="login" length="45" not-null="true" unique="true"/>
<property name="senha" type="string" column="senha" length="45" not-null="true"/>
<property name="acesso" type="int" column="acesso" not-null="true"/>
<one-to-one name="professor" class="Professor" property-ref="usuario" cascade="save-update"/>
</class>
Quando salvo um Usuario o Hibernate faz o seguinte:
Hibernate: insert into ppgcc.usuario (login, senha, acesso) values (?, ?, ?)
Hibernate: select currval(‘ppgcc.usuario_id_usuario_seq’)
Hibernate: update ppgcc.professor set usuario=?, nome=?, email=?, website=? where id_professor=?
O estranho é que ele atualiza o professor, mas na hora de pegar o id do usuario criado está vindo NULL.
Estou usando PostgreSQL.
Obrigado pela ajuda.