Hibernate эквивалент ActiveRecord's has_many: через - PullRequest
3 голосов
/ 06 июля 2011

В Rails можно объявить переходное отношение следующим образом:

class Author < ActiveRecord::Base
    has_many :authorships
    has_many :books, :through => :authorships
end

Возможно ли сделать что-то подобное в Hibernate? Когда я звоню author.getBooks(), я хочу, чтобы Hibernate знал, чтобы объединить авторов с авторскими правами на книги.

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Я не верю, что в отображениях Hibernate есть что-то, что может это сделать, но вы можете просто добавить getBooks() метод в ваш класс Author, который вызывает правильный метод в свойстве authorships:

public class Author {
    public Collection<Book> getBooks() {
        if (this.authorships != null) {
            return this.authorships.getBooks();
        }
        return null;    
    }
}

Я не уверен, почему ORM нужно знать о переходных отношениях между A и C между B, если вы можете просто установить это в классе самостоятельно.

1 голос
/ 22 февраля 2017

Вы можете использовать @ManyToMany с @JoinTable, чтобы объяснить, как должны отображаться отношения.

@ManyToMany(targetEntity = Book.class)
@JoinTable(name = "authorships",
        joinColumns = {@JoinColumn(name = "author_id")},
        inverseJoinColumns = {@JoinColumn(name = "book_id")})        
public Set<Book> books;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...