Для JPA 1 нельзя использовать сущности в качестве идентификатора.
Из JPA 1 Spec (2.1.14)
Первичный ключ (или поле или свойство
составного первичного ключа) должен быть
один из следующих типов: любой Java
примитивный тип; любая примитивная обертка
тип; java.lang.String;
java.util.Date; java.sql.Date.
Если вы используете JPA 1, у вас есть две альтернативы:
A. Вам потребуется создать Project2User2Role с автоматически сгенерированным полем идентификатора, и вы должны указать его в качестве своего идентификатора сущности. Затем вы можете добавить свои отношения в Project, User и Role и указать их соответствующие сопоставления аннотаций (ManyToOne).
Пример:
@Entity
public class Project2User2Role {
private Long id;
private Project project;
private User user;
private Role role;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQPRUSROLID")
@SequenceGenerator(name="SEQPRUSROLID", sequenceName="SEQPRUSROLID", allocationSize=1)
public Long getId() {
return id;
}
@ManyToOne
public Project getProject() {
return project;
}
@ManyToOne
public User getUser() {
return user;
}
@ManyToOne
public Role getRole() {
return role;
}
//the setters
}
B. Вы можете создать свой класс сущностей и продолжать использовать составной идентификатор, но в качестве JPA 1 Spec вы не можете указывать сущности в качестве идентификатора, поэтому вам нужно будет использовать базовые столбцы для этого примера:
@Entity
public class Project2User2Role {
@EmbeddedId
private Project2User2RoleId project2User2RoleId;
@ManyToOne
@JoinColumn(insertable=false, updatable = false)
private Project project;
@ManyToOne
@JoinColumn(insertable=false, updatable = false)
private User user;
@ManyToOne
@JoinColumn(insertable=false, updatable = false)
private Role role;
//getters/setters
}
@Embeddable
class Project2User2RoleId {
private Long projectId;
private Long userId;
private Long roleId;
}
Для JPA 2 :
C. Вы можете указать сущности в качестве своего идентификатора для примеров и определений, пожалуйста, прочтите 2.4 спецификации JPA 2.0: http://jcp.org/aboutJava/communityprocess/final/jsr317/index.html
2.2.3 из документации Hibernate:
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier