В устаревшей базе данных у меня есть три таблицы: Users, Workgroups и UsersWorkgroup.UsersWorkgroup хранит информацию о роли пользователя в рабочей группе.Вот соответствующие фрагменты кода:
@Entity
@Table(name = "users_workgroup")
public class UsersWorkgroup implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected UsersWorkgroupPK usersWorkgroupPK;
@JoinColumn(name = "idworkgroup", referencedColumnName = "idworkgroup")
@ManyToOne(optional = false)
private Workgroup workgroup;
@JoinColumn(name = "user_name", referencedColumnName = "user_name")
@ManyToOne(optional = false)
private Users users;
@Column(name = "role")
private Integer role;
@Embeddable
public class UsersWorkgroupPK implements Serializable {
@Basic(optional = false)
@Column(name = "idworkgroup", insertable=false, updatable=false)
private int idworkgroup;
@Basic(optional = false)
@Column(name = "user_name", insertable=false, updatable=false)
private String userName;
@Entity
@Table(name = "workgroup")
public class Workgroup implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idworkgroup")
private Integer idworkgroup;
@Column(name = "name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idworkgroup")
private Collection<UsersWorkgroup> usersWorkgroupCollection;
И, конечно, проблема в том, что это не работает.В настоящее время я получаю это исключение:
Описание исключения: Обнаружено несовместимое отображение между [class entity.Workgroup] и [class entity.UsersWorkgroup].Обычно это происходит, когда мощность отображения не соответствует количеству его обратных указателей.
Что я не понимаю, так как OneToMany должен соответствовать ManyToOne ... Или это отношение ManyToMany?Если я переключаюсь на @ManyToMany, я получаю это:
Описание исключения: Целевая сущность атрибута отношения [рабочая группа] в классе [class com.ericsson.rsg.ejb.entity.UsersWorkgroup]не может быть определено.Когда не используются обобщенные элементы, убедитесь, что целевая сущность определена в сопоставлении отношений.
Я пытаюсь понять составные ключи (встроенные), но все примеры, которые я смог найти, содержат только простые столбцыне внешние ключи (но в этом весь смысл составного ключа, не так ли?).Может ли таблица UsersWorkgroup тайно быть таблицей соединений?
Должен ли я объявить класс PK строгим классом POJO?Или я должен поместить аннотации @JoinColumn в классе PK?Как мне сослаться на столбцы в составном ключе из другой таблицы?Должен ли я инициализировать объект PK в конструкторе класса refering или это не нужно?
Я чувствую себя полностью застрявшим.