【发布时间】:2011-05-08 13:13:05
【问题描述】:
我在 JPA EclipseLink 中与用户和组之间的复合键建立了多对多关系。我的实现看起来像这样:
用户类别:
@Entity
@Table(name="mbm_user")
public class User extends CanAccessBook{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@OneToMany(mappedBy="user",cascade=CascadeType.PERSIST)
private List<GroupMembership> groups = new ArrayList<GroupMembership>();
/**
GETTER & SETTER
**/
}
组类:
@Entity
@Table(name="mbm_group")
public class Group extends CanAccessBook{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@OneToMany(mappedBy="group", cascade=CascadeType.PERSIST)
private List<GroupMembership> users = new ArrayList<GroupMembership>();
/**
GETTER & SETTER
**/
}
GroupMembership 类:
@Entity
@Table(name = "group_user")
@IdClass(UserGroupPK.class)
public class GroupMembership {
@Id
@ManyToOne
@PrimaryKeyJoinColumn(name="USERID")
private User user;
@Id
@ManyToOne
@PrimaryKeyJoinColumn(name="GROUPID")
private Group group;
@Temporal(TemporalType.DATE)
private Date joinedAt = new Date();
@Temporal(TemporalType.DATE)
private Date validUntil;
/**
GETTER & SETTER
**/
}
UserBookPK 类:
public class UserBookPK{
@Id
@Column(name="BOOKID")
private Long book;
@Id
@Column(name="USERID")
private Long user;
public Long getBook() {
return book;
}
public void setBook(Long book) {
this.book = book;
}
public Long getUser() {
return user;
}
public void setUser(Long user) {
this.user = user;
}
}
我的 JUnit 测试没有报告任何错误,但如果我在我的 Tomcat 上测试它,我会收到以下错误
异常 [EclipseLink-59] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DescriptorException 异常说明:域类[de.kapieren.mbm.server.model.GroupMembership]中没有定义实例变量[groupId],或者不可访问。 内部异常:java.lang.NoSuchFieldException:groupId 映射:org.eclipse.persistence.mappings.DirectToFieldMapping[groupId-->group_user.GROUPID] 描述符:RelationalDescriptor(de.kapieren.mbm.server.model.GroupMembership --> [DatabaseTable(group_user)])
异常 [EclipseLink-59] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DescriptorException 异常说明:域类[de.kapieren.mbm.server.model.GroupMembership]中没有定义实例变量[userId],或者不可访问。 内部异常:java.lang.NoSuchFieldException:userId 映射:org.eclipse.persistence.mappings.DirectToFieldMapping[userId-->group_user.USERID] 描述符:RelationalDescriptor(de.kapieren.mbm.server.model.GroupMembership --> [DatabaseTable(group_user)])
异常 [EclipseLink-0] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DescriptorException 异常描述:访问主键对象 [202] 时发生内部错误。 内部异常:java.lang.NoSuchFieldException:groupId 描述符:RelationalDescriptor(de.kapieren.mbm.server.model.GroupMembership --> [DatabaseTable(group_user)])
这里出了什么问题?
【问题讨论】:
-
开始提示:更改用户用户时会发生什么 --> 用户 userId...
-
为了完整起见,您能否也发布您的 Group 课程。
-
Group 类还在
标签: java orm jpa eclipselink