so I have an entity called "User"
@Entity(name = "user")
@Audited
public class User extends DataObjectAudit {
private static final long serialVersionUID = 1L;
private Set<UserProjectCenterRole> roles = new HashSet<UserProjectCenterRole>();
private RoleTypeEnum role = null;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, orphanRemoval = true)
@Cascade(value = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.DELETE, CascadeType.SAVE_UPDATE })
@Filters({ @Filter(name = "deletedFilter", condition = "deleted <> :deletedParam") })
@NotAudited
public Set<UserProjectCenterRole> getRoles() {
return roles;
}
public void setRoles(Set<UserProjectCenterRole> roles) {
this.roles = roles;
}
@Transient
public RoleTypeEnum getRole() {
return role;
}
@Transient
public void setRole(RoleTypeEnum role) {
this.role = role;
}
}
And here the UserProjectCenterRole entity:
@Entity
@Table(name = "user_projectcenter_role")
public class UserProjectCenterRole extends DataObjectAudit {
private static final long serialVersionUID = 1L;
private User user = null;
private ProjectCenter projectCenter = null;
private RoleTypeEnum role = null;
private Boolean active = null;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
public User getUser() {
return user;
}
@Basic
public Boolean getActive() {
return active;
}
@Enumerated(EnumType.STRING)
public RoleTypeEnum getRole() {
return role;
}
}
And in the panel, there is a drop down panel where the current active role of the user is loaded among with the "lower" possible roles. The options are the result of getRoles() and the chosen option should be loaded into the "role" property.
User sessionUser = StudySession.getSessionUser();
List<RoleTypeEnum> roles = new ArrayList<RoleTypeEnum>();
role.addAll(sessionUser.getActiveRole().getLowerAndEqualsThanSelf());
WefDropDownPanel<RoleTypeEnum> role =
new WefDropDownPanel<RoleTypeEnum>(helper.of(RoleTypeEnum.class, "role").errorRequired(), //
roles) //
.setSizes(Size.S0, Size.S1, Size.S4);
add(roles);
Then the onBeforeSave method for the panel is:
@Override
protected void onBeforeSave(AjaxRequestTarget target, WefForm<User> form) {
super.onBeforeSave(target, form);
User user = getModelObject();
Set<UserProjectCenterRole> roles = user.getRoles();
UserProjectCenterRole currentRole = null;
if (!roles.isEmpty()) {
currentRole = roles.iterator().next();
}
else {
currentRole = new UserProjectCenterRole();
roles.add(currentRole);
}
currentRole.setRole(user.getRole());
currentRole.setUser(user);
currentRole.setActive(true);
}
But at that point "getRole" returns null... and I can't guess why...