У меня две таблицы -
Foo {foo_id, name}
Foo_properties {fp_id, foo_id, phoneNumber}
Теперь я хочу отобразить это в моей объектной модели, используяhibernate .. Мне нужен foo_id в Foo_properties, потому что я хочу сохранить ссылочную целостность и хочу добавить ограничение ON DELETE CASCADE.
, поэтому я отобразил отношение следующим образом -
@Entity
public class Foo{
@Id
private long foo_id;
private String name;
@OneToOne(mappedBy = "foo")
private FooProperties fooProperties;
}
@Entity
public class FooProperties{
@Id
private long fp_id;
private String phoneNumber;
@OneToOne
@JoinColumn(name = "foo_id", nullable = false)
private Foo foo;
}
Теперь, поскольку владельцем является класс FooProperties, я сталкиваюсь со следующими проблемами:
Если я установлюновый экземпляр FooProperties для Foo, существующие FooProperties все еще остаются в БД, и hibernate не удаляет этот экземпляр, например,
Foo foo = entityManager.find(Foo.class, fooId);
foo.setFooProperties(new FooProperties("xxx-xxx-xxx"));
entityManager.merge(foo);
В результате получается новая строка в таблице FooProperties вместе с существующей,Теперь я не понимаю, как я могу изменить свое отображение так, чтобы вышеупомянутый код (или его вариант) работал для всех сценариев, что означает, что мне нужен Foo как сторона-владелец и foo_id в FooProperties.Есть ли способ определить сопоставление следующим образом?
ПРИМЕЧАНИЕ. Я уже задавал вопрос , основываясь на этом, но я думаю, что в предыдущем вопросе мне было непонятно, поэтому задал еще один.