@ManyToMany重复条目异常

时间:2011-01-14 13:37:23

标签: java mysql hibernate many-to-many

我已按以下方式在实体课程和实习生之间映射了双向多对多例外:

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。 有谁猜到为什么?

2 个答案:

答案 0 :(得分:3)

除了Bence Olah之外:未创建(COURSE_IDTRAINEE_ID)对的主键约束,因为您的映射并未说明这些对是唯一的。您需要在代码中将Collection更改为Set以表示此限制,并且将创建主键。

答案 1 :(得分:2)

使用@CollectionOfElements OR @ManyToMany。不要同时使用它们! 请注意@CollectionOfElements是特定于Hibernate的,而@ManyToMany是基于JPA标准的。

进一步阅读: http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html