これがいつから可能になるかはわかりませんが、私はいつも望んでいた方法で複合キーを作成しました:いいえ@EmbeddedId
、必要ありません@IdClass
!!
- 春 4.0.0.M3
- 休止状態 4.3.0.Beta4
- JPA2.1
ユーザー.java :
@Entity
public class User {
@Id
...
@OneToMany(mappedBy="user", cascade=CascadeType.ALL, orphanRemoval=true)
private List<GroupUser> groupUsers;
}
Group.java :
@Entity
public class Group {
@Id
...
@OneToMany(mappedBy="user", cascade=CascadeType.ALL, orphanRemoval=true)
private List<GroupUser> groupUsers;
}
GroupUser.java :
@Entity
public class GroupUser implements Serializable {
@Id
@ManyToOne
@JoinColumn(name="Group_id")
private Group group;
@Id
@ManyToOne
@JoinColumn(name="User_id")
private User user;
@Id
@Column
private String s;
@Column
private int i;
}
そして、これがMySQLの言うことです:
USER GROUP_USER GROUP
------ ------------------------- -------
id User_id (PK, NOT NULL) id
Group_id (PK, NOT NULL)
s (PK, NOT NULL)
i (DEFAULT NULL)
GROUP_USER
詳細:
- 主キー: User_id、Group_id、s
- INDEX #1 / 外部キー: User_id
- INDEX #2 / 外部キー: Group_id
次のような他のテストも行いました。
@Entity
public class A implements Serializable {
@Id
@Column
String a;
@Id
@Column
String b;
@Column
String c;
}
魅力のように動作します!!
またはを使用する理由はまだあります@EmbeddedId
か@IdClass
?
And: これは JPA 2.1 の一部ですか、それとも Hibernate 機能ですか?