2010-01-12 191 views
1

我正在構建一個使用Spring框架和Hibernate註釋的Web應用程序,並陷入兩個實體之間的簡單映射。休眠註釋雙向映射

我正嘗試在用戶和課程之間創建多對多的關係。我跟着Hibernate的教程之一,我的實現如下:

用戶等級:

@Entity 
@Table(name="USER") 
public class User { 

    private Long id; 
    private String email; 
    private String password; 
    private Set<Course> courses = new HashSet<Course>(0); 


    @Id 
    @GeneratedValue 
    @Column(name="USER_ID") 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 


    @Column(name="USER_EMAIL") 
    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    @Column(name="USER_PASSWORD") 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "USER_COURSE", joinColumns = 
    { @JoinColumn(name = "USER_ID") }, 
    inverseJoinColumns = { @JoinColumn(name = "COURSE_ID") }) 
    public Set<Course> getCourses() { 
     return courses; 
    } 

    public void setCourses(Set<Course> courses) { 
     this.courses = courses; 
    } 
} 

課程類:

@Entity 
@Table(name="COURSE") 
public class Course { 

    private Long id; 
    private String name; 

    @Id 
    @GeneratedValue 
    @Column(name="COURSE_ID") 
    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 

    @Column(name="NAME") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

} 

的問題是,這個實現只允許我去一個way

user.getCourses() 

我需要改變什麼,所以我可以在兩個方向?

user.getCourses() 
course.getUsers() 

任何幫助,將不勝感激。

+0

我已經刪除了spring標籤,因爲這個問題與Spring沒有任何關係 – skaffman

回答

0

休眠不會奇蹟般地爲您的Course類添加一個getUsers()方法,您需要自己完成該操作,以及Set<User>字段。

我不知道您閱讀了哪個教程,但您應該閱讀正確的文檔(請參閱bidirectional associations手冊的章節),特別是在討論多對多關係時。

0

一件事是嘗試使用@MappedBy標註爲不擁有的關係,關係的一面。如果沒有理由明確地需要添加所有其他註釋(如@Table,@Column),您可以將它們留出,讓Hibernate在幕後爲您做這項工作。除非需要,否則hibernate團隊建議使用默認值(不要添加註釋)。