EclipseLink JPA - @OneToMany / @ManyToOne

时间:2015-02-03 14:21:13

标签: jpa eclipselink

我正在使用Java 8,EE7,NetBeans 8.0.2,EclipseLink 2.5.2&德比

最初我的实体类是由NetBeans为我创建的,当涉及外键时,它可能默认定义关系的两面。最近,我做了一系列研究,以便更好地理解这一点,并且在不支持非拥有方时将类优化为单向关系,并在不需要时消除CASCADE。

重建后(没有编译错误)我无法让它运行,因为我对代码的理解不正确。

Caused by: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The attribute [clubCourseList] in entity class [class com.clubscores.entity.Course] has a mappedBy value of [COURSE] which does not exist in its owning entity class [class com.clubscores.entity.ClubCourse]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass.

在示例中,课程在DB“ID”中定义了一个自动生成的字段,而ClubCourse定义了两个外键“CLUB”和“COURSE”,这样每个俱乐部都可以与许多高尔夫球场相关联。课程不会在数据库中映射回ClubCourse,但在这种情况下,这是我将在代码中保留的关系。

课程://定义高尔夫球场

@OneToMany(mappedBy = "COURSE")
private List<ClubCourse> clubCourseList;

ClubCourse://连接俱乐部和课程的中间表

@JoinColumn(name = "COURSE", referencedColumnName = "ID")
@ManyToOne(optional = false)
private Course course;

如果我将ClubCourse中的“course”属性重命名为其他内容并相应地调整mappedBy,那么错误就会转移到其他表中的另一个关系。

此定义是否有问题或者还有什么可能导致此错误?

1 个答案:

答案 0 :(得分:2)

您指定了mappedBy = "COURSE",但您的字段名称为course。这是区分大小写的。请注意,mappedBy需要字段名称,而不是列名称。只需更改为mappedBy = "course"即可。