Можно ли отобразить две взаимосвязи с одним столбцом? - PullRequest
0 голосов
/ 24 августа 2011

Я работаю с JPA над устаревшей базой данных.Фактическая семантика заключается в том, что foo владеет отношением, и что оно действительно имеет только одну bar, что потребует аннотации @ManyToOne.

foo     (id, bar_id)
foo_bar (foo_id, bar_id)
bar     (id)

Все, что заканчивается на _id, являетсяиностранный ключ.Кроме того, столбцы в foo_bar составляют первичный ключ.

В идеальном мире я просто удалил бы таблицу foo_bar, но есть другие приложения, которые используют ту же базу данных, которая может сломаться, еслиэто опущено.Как бы я полностью отобразил эти отношения?

Если нет, то что было бы хорошим способом сохранить целостность этих беспорядочных отношений?

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Сопоставить столбец foo.bar_id с отношением ManyToOne. Сопоставьте таблицу соединений с отношением ManyToMany. Не предоставляйте средства доступа к коллекции bars в Foo. Заставьте setBar() очистить коллекцию баров и добавить новую.

Таким образом, ассоциация ManyToMany полностью инкапсулирована внутри для обработки ассоциации ManyToOne.

public class Foo {

    @ManyToOne
    @JoinColumn(name = "bar_id")
    private Bar bar;

    @ManyToMany
    @JoinTable(...)
    private Set<Bar> bars = new HashSet<Bar>();

    // no getter, setter or any other method for the bars collection

    public void setBar(Bar bar) {
        this.bar = bar;
        this.bars.clear();
        if (bar != null) {
            this.bars.add(bar);
        }
    }
}
0 голосов
/ 24 августа 2011

Вы можете использовать jpa для отображения вышеуказанных отношений. не беспокойся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...