Итак, у меня есть две таблицы:
table A
-id
-other stuff
table B
-id
-stuff
-a_id, a fk column to id in A
в спящем режиме, я отобразил B.a_id как простое свойство (я не хочу много-к-одному и получаю целый экземпляр AЯ просто хочу Id).Допустим, у меня есть строка в A с id = 100.
, если я пытаюсь вставить новую строку в B, с a_id = 100, я получаю нарушение ограничения внешнего ключа postgres, говорящее, что A не существует с id= 100!
Я этого не понимаю.Я включил show_sql в hibernate, и он генерирует это для вставки B:
insert into B (stuff, a_id) values (?, ?)
, чтобы это выглядело корректно.
Отображение гибернации, которое у меня есть для B.a_id, выглядит так:
<property name="aId" type="java.lang.Long" unique="true" not-null="true">
<column name="a_id" />
</property>
ограничение, добавленное в postgres, выглядит следующим образом:
alter table B
add constraint myfk
foreign key (a_id)
references A;
Есть идеи?
Спасибо
edit: Я не думаю, что hibernate имеет какое-либо отношениес этим.если я пытаюсь вставить вручную с помощью sql, я получаю ту же ошибку.
edit2: есть тонкий поворот - поля id являются int8 и имеют последовательности на них:
create table A (
id int8 not null unique,
stuff varchar(10),
primary key(id)
);
create table B (
id int8 not null unique,
a_id int8 not null references A,
primary key(id)
);
create sequence a_seq;
ALTER SEQUENCE a_seq OWNED BY a.id;
ALTER TABLE a ALTER COLUMN id SET DEFAULT nextval('a_seq');
create sequence b_seq;
ALTER SEQUENCE b_seq OWNED BY b.id;
ALTER TABLE b ALTER COLUMN id SET DEFAULT nextval('b_seq');