В старой базе данных у меня есть три таблицы: пользователи, рабочие группы и пользователиWorkgroup. UsersWorkgroup хранит, какую роль пользователь имеет в рабочей группе. Вот соответствующие фрагменты кода:JPA Compound key with @EmbeddedId
@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;
И, конечно же, проблема в том, что не работает. В настоящее время я получаю это исключение:
Исключения Описания: несовместимо отображения встречено между [классом entity.Workgroup] и [классом entity.UsersWorkgroup]. Это обычно возникает, когда мощность отображения не соответствует мощности его обратного указателя .
Что я не понимаю, поскольку OneToMany должен соответствовать ManyToOne ... Или это отношения ManyToMany? Если я переключаюсь на @ManyToMany, я получаю это:
Exception Описание: Цель сущность отношений атрибут [рабочая группа] на классе [класс com.ericsson.rsg.ejb.entity.UsersWorkgroup] не может быть определено. Если не используются генераторы, убедитесь, что целевой объект равен , определенному в сопоставлении отношений.
Я пытаюсь понять составные ключи (встроенные), но все примеры, которые я мог найти, имеют только простые столбцы, которые не являются внешними ключами (но это целая точка сложного ключа, не так ли?). Может ли таблица UsersWorkgroup скрывать таблицу соединений?
Должен ли я объявлять класс PK строгим классом POJO? Или я должен помещать аннотации @JoinColumn в классе PK? Как я могу ссылаться на столбцы в составном ключе из другой таблицы? Должен ли я инициализировать объект PK в конструкторе ссылочного класса, или это необязательно?
Я чувствую себя полностью застрявшим.