【发布时间】:2013-09-25 15:51:23
【问题描述】:
我不知道什么时候可以做到这一点,但我只是按照我一直想要的方式创建了复合键:不需要@EmbeddedId,也不需要@IdClass!!
- 弹簧 4.0.0.M3
- 休眠 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 / 外键:用户 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 功能?
【问题讨论】:
标签: spring hibernate jpa jointable