2011-01-14 51 views
0

我制訂之間的雙向多到許多異常的實體課程和見習以下方式:@ManyToMany重複條目異常

Course 
{ 
    ... 
    private Collection<Trainee> students; 
    ... 
    @ManyToMany(targetEntity = lesson.domain.Trainee.class, 
     cascade = {CascadeType.All}, fetch = {FetchType.EAGER}) 
    @Jointable(name="COURSE_TRAINEE", 
     joincolumns = @JoinColumn(name="COURSE_ID"), 
     inverseJoinColumns = @JoinColumn(name = "TRAINEE_ID")) 
    @CollectionOfElements 
    public Collection<Trainee> getStudents() { 
     return students; 
     } 
    ... 
} 


Trainee 
{ 
    ... 
    private Collection<Course> authCourses; 
    ... 
    @ManyToMany(cascade = {CascadeType.All}, fetch = {FetchType.EAGER}, 
     mappedBy = "students", targetEntity = lesson.domain.Course.class) 
    @CollectionOfElements 
    public Collection<Course> getAuthCourses() { 
     return authCourses; 
    } 
    ... 
} 

而不是建立在主鍵由的表兩個外鍵(從相關的兩個實體的表導入),系統會生成表「COURSE_TRAINEE」使用下面的模式:

alt text

我在MySQL 5.1和我的應用程序工作。服務器是JBoss 5.1。 有沒有人猜測爲什麼?

回答

3

除了本斯奧拉:對(COURSE_IDTRAINEE_ID)沒有建立對因您的映射不說這些對是唯一的主鍵約束。您需要在代碼中將Collection s更改爲Set s才能表達此限制,並且將創建主鍵。