У меня есть пользователь и таблица userRole с отношением «многие ко многим». У меня есть следующее отображение Hibernate:
<hibernate-mapping>
<class name="domain.User" schema="dbo" table="Users">
<id name="userId" type="int">
<column name="UserId"/>
<generator class="native"/>
</id>
<property name="username" type="string">
<column name="Username" not-null="true"/>
</property>
<property name="password" type="string">
<column name="Password" not-null="true"/>
</property>
<set cascade="all" inverse="true" name="userRole" table="UserRoleRelationships">
<key>
<column name="UserId"/>
</key>
<many-to-many class="domain.UserRole" column="RoleId" />
</set>
</class>
</hibernate-mapping>
и
<hibernate-mapping>
<class name="domain.UserRole" schema="dbo" table="UserRoles">
<id name="roleId" type="int">
<column name="RoleId"/>
<generator class="native"/>
</id>
<property name="role" type="string">
<column name="Role" not-null="true"/>
</property>
</class>
</hibernate-mapping>
Мои бобы выглядят так:
public class User {
private Integer userId;
private String username;
private String password;
private Set<UserRole> userRole;
// getters and setters
}
public class UserRole {
private Integer roleId;
private String role;
private User user;
// getters and setters
}
Запрос на выбор пользователя по его имени выглядит так:
public List<User> getWithUsername(String username){
return getHibernateTemplate().find("from User as u "
+ "inner join fetch u.userRole "
+ "where u.username = '" + username + "'" );
}
Проблема в том, что когда я пытаюсь распечатать это с помощью следующих циклов:
for (User u : list){
System.out.println(u.getUsername());
for (UserRole ur : u.getUserRole()){
System.out.println(ur.getRole());
}
}
Он печатает его вдвое:
Username: jorgen
User role: User
User role: Admin
Username: jorgen
User role: User
User role: Admin
Что я делаю не так? Пожалуйста, помогите:)