У меня есть случай использования, когда пользователь получил несколько профилей: так, связь один-ко-многим.
Это отображается через эти устаревшие таблицы в псевдо sql.
TABLE USER
(
ID PK
SURNAME VARCHAR2(45 BYTE) NOT NULL,
NAME VARCHAR2(45 BYTE) NOT NULL,
USER_ID NUMBER
)
TABLE USER_PROFILES
(
USER_ID NUMBER NOT NULL,
ID_PROFILO NUMBER NOT NULL,
DESCRIPTION VARCHAR2(32 BYTE)
)
Это отображение Java:
@Entity
@Table(name = "USER)
public class User{
@Id
@Column(name = "ID")
private String id;
@OneToMany(fetch= FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")})
private List<UtenteProfilo> profiles;
}
и класс userprofiles
@Entity
@Table(name = "USER_PROFILES")
@IdClass(UserProfile.UserProfileId.class)
public class UserProfile implements java.io.Serializable {
@Id
@Column(name = "USER_ID", nullable = false)
private Long userId;
@Id
@Column(name = "ID_PROFILO", nullable = false, insertable = false, updatable = false)
private Long profiloId;
private String description;
static public class UserProfileId implements Serializable {
@Id
@Column(name = "USER_ID", nullable = false)
Long userId;
@Id
@Column(name = "ID_PROFILO", nullable = false)
Long profiloId;
}
}
Когда я получаю пользователя от UserDao, я получаю это исключение:
Exception Description: The @JoinColumns on the annotated element [field profiles] from the entity class [User] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn.
проблема в том, что на исходном объекте (который связывает 1-N) у меня есть только один столбец для объединения.
Я попытался изменить идентификатор целевого объекта;поэтому в классе user_profiles объявляется только user_id в качестве ключа: но таким образом, когда jpa создает запрос, он обрабатывает только один случай user_profiles, делая отношение как 1-1.
Любая идея, как решить проблему и сделатьработа ассоциации?
С уважением Массимо