JPA:为什么没有创建连接表?

时间:2012-07-13 19:25:25

标签: java database jpa glassfish

在我的应用程序中,我有以下Student实体:

@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 个答案:

答案 0 :(得分:1)

对于你所说的我猜你与其他两个实体(优惠券和收据)有多对多的关系,但你将它们标记为“一对多”的关系,所以永远不会成为一个连接table,所以你必须用@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;
}