我不知道从什么时候开始,这种方式就成为可能了,但是我刚刚创建了复合键,而且使用了我一直想要的方式:不需要@EmbeddedId
和@IdClass
!!
- Spring 4.0.0.M3
- Hibernate 4.3.0.Beta4
- JPA 2.1
User.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
- 索引#1 / 外键:User_id
- 索引#2 / 外键:Group_id
我还进行了其他测试,例如:
@Entity
public class A implements Serializable {
@Id
@Column
String a;
@Id
@Column
String b;
@Column
String c;
}
太棒了!效果很好!
还有使用@EmbeddedId
或@IdClass
的任何理由吗?
这是JPA 2.1的一部分还是Hibernate的一个特性?
@EmbeddedId
还是@IdClass
?@IdClass
看起来更简单,有什么缺点吗? - Benjamin M