我是Spring的新手。我認爲最好用一個小例子來解釋我的問題。假設我有兩個主要類別:User
和Group
。 A User
可以是更多Group
和Group
的一部分,顯然,可以具有更多User
。所以他們之間的關係是多對多的。我想表明,是這樣的(使用JSTL):顯示@OneToMany和@ManyToOne編碼的多對多關係的屬性
<c:forEach items="${groups}" var="group">
<c:out value="${group.name}"/> (<c:out value="${fn:length(group.users)}" />):<br />
<c:forEach items="${groups.users}" var="user">
<c:out value="${user.name}"/><br />
</c:forEach><br />
</c:forEach>
基本上,輸出應該是這樣的:
隨機(2):
喬
布洛斯
星球大戰(5):
盧克
丘巴卡
達斯維達
萊婭公主
尤達
任天堂(3):
超級馬里奧
銀河戰士
塞爾達
我最初的經典@ManyToMany
註釋編碼它,使用一個額外的表user_has_group
(由JPA創建和管理)並且工作完美。
我需要修改結構,因爲我需要user_has_group
表具有joined_date
列。爲了達到這個目標,我在網上讀到,最好的解決方案是創建另一個班級(即UserHasGroup
),並從User
和group
向此班級添加一對多關係。這樣做可以將其他屬性添加到UserHasGroup
類中(因此可以將其他列添加到user_has_group
表中)。喜歡的東西:
用戶:
@Entity
@Table(name = "user")
public class User
{
@Id
@GeneratedValue
@Column
private int id;
@Column
private String alias;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<UserHasGroup> userHasGroup = new ArrayList<UserHasGroup>();
// Constructors/getters/setters
}
組:
@Entity
@Table(name = "`group`")
public class Group
{
@Id
@GeneratedValue
@Column
private int id;
@Column
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "group")
private List<UserHasGroup> userHasGroup = new ArrayList<UserHasGroup>();
// Constructors/getters/setters
}
UserHasGroup:
@Entity
@Table(name = "user_has_group")
public class UserHasGroup
{
@Id
@GeneratedValue
@Column
private int id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
@Column
@Temporal(TemporalType.DATE)
private Date joinedDate;
// Constructors/getters/setters
}
到目前爲止,一切都很好。所有測試成功運行並且功能得以維護。
但我遇到了JSTL的問題。實際上,用這個新的結構顯然不可能做group.users
遍歷用戶。
達到與之前相同的功能但使用這種新結構的最佳方式是什麼?
謝謝。
是否存在與其他信息的任何問題,我已經提供? – 2012-02-29 23:05:26