гибернация необязательное соединение - PullRequest
1 голос
/ 08 марта 2011

У меня есть сущность, сопоставленная с One-To-One согласно следующему коду:

@Entity
@Table(name = "my_entity")
public class MyEntity
{
    ...
    @OneToOne
    @JoinColumn(name = "site_id")
    private Site site;
    ...
}

Мне только что сказали, что я должен начать хранить записи MyEntity со значением 'site_id'которые могут не существовать в таблице сайта.Мне все еще нужно сохранить значение для site_id, однако оно не будет соответствовать сущности Site.

Единственное, о чем я могу думать, - это создать сущность 2-го типа, сопоставленную с той же таблицей, которая не соответствуетсопоставить One-To-One / объединение с таблицей сайта.

Есть ли способ сделать это без создания 2-го сопоставленного объекта для той же таблицы?

спасибо, Павел.

1 Ответ

3 голосов
/ 08 марта 2011

Это очень плохой дизайн.Внешний ключ должен быть внешним ключом и не должен указывать на несуществующие строки.Я бы исправил данные / дизайн.

Если вы действительно не можете, используйте аннотацию NotFound, описанную здесь :

По умолчанию, когда Hibernate не можетразрешить сопоставление, поскольку ожидаемый связанный элемент отсутствует в базе данных (неверный идентификатор в столбце сопоставления), Hibernate вызывает исключение.Это может быть неудобно для устаревших и плохо поддерживаемых схем.Вы можете попросить Hibernate игнорировать такие элементы вместо того, чтобы вызывать исключение с помощью аннотации @NotFound.Эту аннотацию можно использовать для ассоциации @OneToOne (с FK), @ManyToOne, @OneToMany или @ManyToMany.

...