2011-07-06 1 views
3

を通して推移関係を宣言することが可能である:Hibernateの同等:次のようにRailsでは

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

は、Hibernateに似た何かをすることは可能ですか?私がauthor.getBooks()と呼ぶとき、私はHibernateに著者と著者との本を一緒に参加させることを知りたい。

答えて

2

私はこれを達成することができますHibernateのマッピングに何かがあると信じていませんが、あなたは、単にauthorshipsプロパティに正しいメソッドを呼び出すあなたのAuthorクラスにgetBooks()メソッドを追加することができます。

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

I ORMがBの間のAとCとの過渡的な関係について知っている必要があるのはなぜか分かりません。

+0

ありがとうございます、それは私が現在持っている回避策です。この問題は、単一のテーブル継承を追加して、関連のクラスに基づいて多態的な結合を取得したい場合に発生します。 –

1

@ManyToManyには@JoinTableを使用して、関係のマッピング方法を説明することができます。

@ManyToMany(targetEntity = Book.class) 
@JoinTable(name = "authorships", 
     joinColumns = {@JoinColumn(name = "author_id")}, 
     inverseJoinColumns = {@JoinColumn(name = "book_id")})   
public Set<Book> books; 
関連する問題