У меня есть отношение ManyToMany с составным ключом между пользователем и группой в JPA EclipseLink. Моя реализация выглядит следующим образом:Проблема с ManyToMany и 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, послесвечение услуги - 2.1.1.v20100817- r8050): org.eclipse.persistence.exceptions.DescriptorException Исключение Описание: переменная экземпляра [groupId] не определена в классе домена [de.kapieren.mbm.server.model.GroupMembership], или она недоступна. Внутренняя Исключение: java.lang.NoSuchFieldException: идентификатор_группы Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping [groupId-- > group_user.GROUPID] Descriptor: RelationalDescriptor (de.kapieren.mbm.server.model.GroupMembership - > [DatabaseTable (group_user)])
Исключение [EclipseLink-59] (Eclipse, Постоянство Услуги - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DescriptorException Исключение Описание: экземпляр переменная [идентификатор пользователя ] не определен в классе домена [de.kapieren.mbm.server.model.GroupMembership], или он недоступен. Внутренняя Исключение: java.lang.NoSuchFieldException: идентификатор пользователя Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping [userId-- > group_user.USERID] Descriptor: RelationalDescriptor (de.kapieren.mbm.server.model.GroupMembership - > [DatabaseTable (group_user)])
Исключение [EclipseLink-0] (Eclipse, Постоянство Услуги - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DescriptorException Исключение Описание: внутренняя ошибка доступа объект первичного ключа [202]. Внутренняя Исключение: java.lang.NoSuchFieldException: идентификатор_группы Descriptor: RelationalDescriptor (de.kapieren.mbm.server.model.GroupMembership - > [DatabaseTable (group_user)])
Что происходит здесь не так?
Начальный совет: что происходит, когда вы меняете пользователя пользователя -> User userId ... –
Для полноты вы можете разместить свой класс группы. –
Класс группы все еще существует – LeonS