晚上!
我有一个数据库结构,其中包括一个连接表(用户组),该表将用户实体与组实体相关联以进行授权。这是一个多对多的关系(用户是所有者)。遵循 BalusC 在其他帖子中提供的提示和技巧,我正在使用 Omnifaces 框架提供的 SelectItemsConverter 自定义转换器,它允许我使用 Group 实体正确填充下拉列表,但我无法找出正确的语法然后将这些添加到用户实体持有的组中。就目前情况而言,代码将尝试将 Groups 实体转换为带有终端结果的实体!做了一些挖掘之后,我 我想知道是否需要以某种方式绑定对视图的引用,然后在提交表单时将引用传递给 Groups add 方法,但这似乎有点笨拙,我找不到任何可以证实我的理论的东西。有人指点吗?
用户实体:
@Entity
@Table(name = "Users")
@XmlRootElement
...
public class Users implements Serializable {
...
@JoinTable(name = "User_Groups", joinColumns = {
@JoinColumn(name = "User_ID", referencedColumnName = "User_ID")}, inverseJoinColumns = {
@JoinColumn(name = "Group_ID", referencedColumnName = "Group_ID")})
@ManyToMany
private Collection<Groups> groupsCollection;
...
团体实体:
@Entity
@Table(name = "Groups")
...
public class Groups implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "Group_ID")
private Integer groupID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "Group_Name")
private String groupName;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "Group_Desc")
private String groupDesc;
@ManyToMany(mappedBy = "groupsCollection")
private Collection<Users> usersCollection;
...
来自 Create Users JSF 页面的代码片段:
...
<h:outputLabel value="#{bundle.CreateUsersLabel_groups}" for="groupsCollection" />
<h:selectOneMenu id="groupsCollection" value="#{usersController.selected.groupsCollection}" title="#{bundle.CreateUsersTitle_groups}" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{groupsController.itemsAvailableSelectOne}" />
</h:selectOneMenu>
...