JPA:为什么没有创建连接表?
问题描述:
在我的应用程序,我有以下Student
实体:JPA:为什么没有创建连接表?
@Entity
public class Student extends Commenter implements Serializable {
...
@OneToMany
private List<Coupon> coupons;
@OneToMany
private List<Receipt> receipts;
@ManyToMany
private List<Course> courses;
@ManyToMany
private List<Sessions> sessions;
...
}
当我在本地部署的应用程序,一切工作正常。但是,当我在我们的服务器上部署应用程序时,未创建连接表student_coupon
和student_receipt
。
我试图删除整个数据库并重新创建所有表,但我不知道为什么上面的2表从未创建。其他连接表(student_sessions
和student_course
)始终正确创建。
如果您能给我一个建议,我将不胜感激。
最好的问候,
答
对你说什么,我猜你有许多人与其他两个实体(优惠券和收据)一对多的关系,但是你将其标记为“一对多”的关系,这样有永远不会是一个连接表,所以你必须注解与@ManyToMany注释,而不是(像你与其他两个领域做)的关系字段:
@Entity
public class Student extends Commenter implements Serializable {
@ManyToMany //Changed this
@JoinTable(name = "student_coupon",
joinColumns = {@JoinColumn(name="studentId")}, //This could be omitted
inverseJoinColumns = {@JoinColumn(name="couponId")} //and left defaults
private List<Coupon> coupons;
@ManyToMany //and this
@JoinTable(name = "student_receipt",
joinColumns = {@JoinColumn(name="studentId")},
inverseJoinColumns = {@JoinColumn(name="receiptId")}
private List<Receipt> receipts;
@ManyToMany
private List<Course> courses;
@ManyToMany
private List<Sessions> sessions;
}
你检查,如果你有一个连接列在你的优惠券,收据,课程和会议桌上?据我记得,如果你有双向OneToMany关系,他们将使用连接列。 – Gamb 2012-07-13 19:30:22
@Gamb::)我的关系是单向的。此外,正如我在文章中提到的,表格是在本地部署我的应用程序时创建的。 – 2012-07-13 19:57:53
只是好奇:你在本地使用什么DB,什么是远程?有时我遇到了一些困难,我的本地H2/Derby可以使用表名,而远程SQL Server/MySQL不喜欢它。 – jwj 2012-07-13 20:02:41