2011-07-06 4 views
3

Rails il est possible de déclarer une relation transitive comme suit:Hibernate équivalent de has_many de ActiveRecord: par

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

Est-il possible de faire quelque chose de similaire dans Hibernate? Quand j'appelle le author.getBooks(), je veux que Hibernate sache rejoindre des auteurs avec des livres.

Répondre

2

Je ne crois pas qu'il y ait quoi que ce soit dans les applications Hibernate qui peuvent arriver, mais vous pouvez simplement ajouter une méthode getBooks() à votre classe Author qui appelle la méthode correcte sur la propriété authorships:

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

I Je ne sais pas pourquoi l'ORM aurait besoin de savoir sur une relation transitive entre A et C entre B, si vous pouvez simplement le mettre en place dans la classe sur son propre.

+0

Merci, c'est la solution de contournement que j'ai actuellement. Le problème (et c'est probablement une question différente) est quand vous ajoutez l'héritage de table simple et voulez obtenir des jointures polymorphes basées sur la classe de l'association. –

1

Vous pouvez utiliser un @ManyToMany avec un @JoinTable pour expliquer comment la relation doit être mappée.

@ManyToMany(targetEntity = Book.class) 
@JoinTable(name = "authorships", 
     joinColumns = {@JoinColumn(name = "author_id")}, 
     inverseJoinColumns = {@JoinColumn(name = "book_id")})   
public Set<Book> books; 
Questions connexes