2012-07-13 26 views
4

在我的应用程序,我有以下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_couponstudent_receipt

我试图删除整个数据库并重新创建所有表,但我不知道为什么上面的2表从未创建。其他连接表(student_sessionsstudent_course)始终正确创建。

如果您能给我一个建议,我将不胜感激。

最好的问候,

+1

你检查,如果你有一个连接列在你的优惠券,收据,课程和会议桌上?据我记得,如果你有双向OneToMany关系,他们将使用连接列。 – Gamb 2012-07-13 19:30:22

+0

@Gamb::)我的关系是单向的。此外,正如我在文章中提到的,表格是在本地部署我的应用程序时创建的。 – 2012-07-13 19:57:53

+0

只是好奇:你在本地使用什么DB,什么是远程?有时我遇到了一些困难,我的本地H2/Derby可以使用表名,而远程SQL Server/MySQL不喜欢它。 – jwj 2012-07-13 20:02:41

回答

1

对你说什么,我猜你有许多人与其他两个实体(优惠券和收据)一对多的关系,但是你将其标记为“一对多”的关系,这样有永远不会是一个连接表,所以你必须注解与@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; 
}