我正在使用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;
}
}
问题是这个实现只允许我走一条路
user.getCourses()
我需要改变什么,所以我可以双向前进?
user.getCourses()
course.getUsers()
任何帮助都将不胜感激。
答案 0 :(得分:0)
Hibernate不会在您的getUsers()
课程中神奇地添加Course
方法,您需要自己执行此操作以及Set<User>
字段。
我不知道您阅读了哪个教程,但是您应该阅读适当的文档(请参阅bidirectional associations上的手册部分),特别是在谈到多对多关系时。
答案 1 :(得分:0)
我猜你需要的是双向很多关系。在这种情况下,一方必须是所有者。此示例可能有所帮助:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ (2.2.5.3.3。多对多)
答案 2 :(得分:0)
要尝试的一件事是将@MappedBy注释用于不拥有关系的关系一侧。
另外一点,如果没有理由你明确需要添加所有其他注释(比如@Table,@ Column),你可以将它们排除在外,让Hibernate在幕后为你工作。除非你需要,否则hibernate团队建议使用默认值(不要添加注释)。