刚接触 Hibernate。
我有一个用户组多对多的关系。 三个表:用户,组和用户组映射表。
实体:
New to Hibernate.
I have User Group many to many relation. Three tables : User , Group and UserGroup mapping table.
Entities:
@Entity
@Table(name = "user")
public class User {
@Id
@Column (name = "username")
private String userName;
@Column (name = "password", nullable = false)
private String password;
@ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinTable(name="usergroup",
joinColumns={@JoinColumn(name="username")},
inverseJoinColumns={@JoinColumn(name="groupname")})
private Set<Group> userGroups = new HashSet<Group>();
... setter and getters
@Entity
@Table(name = "group")
public class Group {
@Id
@Column(name = "groupname")
private String groupName;
@Column(name = "admin", nullable = false)
private String admin;
@ManyToMany(mappedBy = "userGroups", fetch = FetchType.EAGER)
private Set<User> users = new HashSet<User>();
... setter and getters
请注意,在Group Entity中,我使用了EAGER方法进行fetch操作。现在,当我调用我的DAO来检索系统中的所有组时,使用以下标准:
Criteria criteria = session.createCriteria(Group.class);
return criteria.list();
我正在从映射表(usergroup)中获取所有行,而不是获取实际组数...
例如,如果我的用户表中有
username password
-----------------
user1 user1
user2 user2
在群组表中
groupname admin
---------------
grp1 user1
grp2 user2
在用户组表中
username groupname
------------------
user1 grp1
user2 grp2
user1 grp2
user2 grp1
结果将是以下列表 - {grp1,grp2,grp2,grp1}
而不是{grp1,grp2}
如果我在Group Entity中将fetch方法更改为LAZY,我会得到正确的结果, 但Hibernate在另一个地方抛出了LazyException...
请帮忙决定应该使用哪种fetch方法以及原因?
谢谢!