我是JPA和Hibernate的新手。 我能夠按預期設置一些小的基本示例。 現在我正在嘗試將它用於第一個真實世界的項目。 研究Hibernate的最佳實踐我發現你應該避免多對多的關係。我在這裏發現了相關的問題,我理解爲什麼不使用它的概念,但我不理解應該如何實施。休眠 - 避免多對多關聯 - 如何實現它?
所以,當我有一個用戶的經常使用的例子,可以包含許多組的一部分和一個有很多用戶的組時,如何實現它。 所以這是一個多對多的關係。但就我的理解而言,我不應該使用多對多,因爲我很可能將來需要其他信息,例如用戶在團隊中的具體角色或加入時的日期。 因此,我使用兩個一對多關係和一個連接表,它不僅包含ID,還包含角色或日期等附加信息。 是嗎? 然後 類組都沒有屬性用戶 也不 類用戶有一個屬性組 都有一個屬性joinTableEntries?
到目前爲止,我是否掌握了這個概念?
@Entity
@Table(name="user")
public class User {
private int userId;
private String username;
private Set<JTUserGroup> jtUserGroupSet=new HashSet<JTUserGroup>(0);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "userid")
public int getUserId()
{
return this.userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<JTUserGroup> getJtUserGroupSet() {
return jtUserGroupSet;
}
public void setJtUserGroupSet(Set<JTUserGroup> jtUserGroupSet) {
this.jtUserGroupSet = jtUserGroupSet;
}
}
@Entity
@Table(name = "forumgroup")
public class Group {
private int groupId;
private String groupname;
private Set<JTUserGroup> jtUserGroupSet=new HashSet<JTUserGroup>(0);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "groupid")
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public String getGroupname() {
return groupname;
}
public void setGroupname(String groupname) {
this.groupname = groupname;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
public Set<JTUserGroup> getJtUserGroupSet() {
return jtUserGroupSet;
}
public void setJtUserGroupSet(Set<JTUserGroup> jtUserGroupSet) {
this.jtUserGroupSet = jtUserGroupSet;
}
}
@Entity
@Table(name = "jtusergroup")
public class JTUserGroup {
private int joinId;
private User user;
private Group group;`enter code here`
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getJoinId() {
return joinId;
}
public void setJoinId(int joinId) {
this.joinId = joinId;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "userid", nullable = false)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "groupid", nullable = false)
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
,然後使用這些我一個新的用戶添加到組這樣的:
User user1=new User();
User user2=new User();
User user3=new User();
Group group1=new Group();
Group group2=new Group();
user1.setUsername("Mark");
user2.setUsername("Anton");
user3.setUsername("Maggy");
group1.setGroupname("Mark_Maggy");
group2.setGroupname("Maggy_Anton");
JTUserGroup jt1=new JTUserGroup();
jt1.setGroup(group1);
jt1.setUser(user1);
JTUserGroup jt2=new JTUserGroup();
jt2.setGroup(group1);
jt2.setUser(user3);
JTUserGroup jt3=new JTUserGroup();
jt3.setGroup(group2);
jt3.setUser(user3);
JTUserGroup jt4=new JTUserGroup();
jt4.setGroup(group2);
jt4.setUser(user2);
GenericDAO<JTUserGroup> jtDao=new GenericDAO<JTUserGroup>();
jtDao.beginTransaction();
jtDao.insert(jt1);
jtDao.insert(jt2);
jtDao.insert(jt3);
jtDao.insert(jt4);
jtDao.commit();